|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Раскладка файлов по части имени |
|
CMD/BAT - Раскладка файлов по части имени
|
Новый участник Сообщения: 4 |
В папку периодично ложатся файлы разных расширений по названиям к примеру 18-04261, 05-03182. Необходимо их раскладывать по папкам названия которых равны первым цифрам после тире, по примерах 04 и 03 соответственно, так же после папки идет текущий месяц и год, после текущая дата. Пример 04/Septembe.20/03. Если папки не существуют, их создать. Заранее спасибо за помощь.
|
|
Отправлено: 11:56, 04-09-2020 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Dyaus, примеры реальных имён файлов приведите. С расширениями.
Цитата Dyaus:
Цитата Dyaus:
|
||
Отправлено: 12:56, 04-09-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать папку/файл с "/" в названии не то чтобы невозможно создать, но я за такое не возьмусь. потому с форматом что-то нужно менять. или месяц-год-дата это вложенные папки?
Что по поводу совпадений имен файлов в одной и той же папке? заменять, спрашивать, игнорировать, переименовывать? сколько цифр после тире брать (вроде как вижу что две, но мало ли...) если количество плавающее - как определять? Где находятся папки по которым нужно раскладывать (или где их нужно создвавать)? пока набросал что-то вот такое (с созданием папок в директории в которой ведется обработка, без добавления даты и без обработки совпадающих имен файлов): и да, без реального перемещения (echo перед move если убрать - будет с перемещением, но не советую пока не выяснены остальные вопросы) |
Отправлено: 12:57, 04-09-2020 | #3 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Действительно дефисы. После дефиса нужны только две цифры. К сожалению в таком формате 04/Septembe.20/03 на работе существует давно так. Чаще всего файлы 01-05041, 03-08041, 25-02041 и т.д. расширения подавляюще xls, xlsx, doc, docx. Реже pdf, jpg, jpeg. В формате к примеру 01-05041.xlsx нужно переместить в папку 05/Septembe.20/04 , где 04 сегодняшнее число. Было бы лучше одинаковые файлы переименовать.
|
Отправлено: 13:51, 04-09-2020 | #4 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать В смысле папка 05 в ней папка Septembe.20, в ней уже 04
В смысле папка 05 в ней папка Septembe.20, в ней уже папка 04 |
|
Отправлено: 14:11, 04-09-2020 | #5 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать @echo off for /f "tokens=1* delims==" %%a in ('"wmic path win32_localtime get Day,Month,Year /value|find "^=""') do set "%%a=0%%b" set Year=%Year:~-5% set Month=%Month:~-3% set Day=%Day:~-3% SETLOCAL ENABLEDELAYEDEXPANSION pushd d:\tmp for /f "delims=" %%i in ('dir /b /a:-d *.txt') do ( for /f "tokens=2 delims=-" %%j in ("%%i") do ( set fname=%%j if not exist "!fname:~0,2!" ( md "!fname:~0,2!" ) if not exist "!fname:~0,2!/%Month%.%Year%" ( md "!fname:~0,2!/%Month%.%Year%" ) if not exist "!fname:~0,2!/%Month%.%Year%/%Day%" ( md "!fname:~0,2!/%Month%.%Year%/%Day%" ) if not exist "!fname:~0,2!/%%i" ( echo move "%%i" "!fname:~0,2!/%Month%.%Year%/%Day%/%%i" ) else ( echo move "%%i" "!fname:~0,2!/%Month%.%Year%/%Day%/%%~ni_%random%.%%~xi" ) ) ) popd |
Отправлено: 15:01, 04-09-2020 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off cls Set "BoxIn=Z:\Box_In" Set "BoxOut=Z:\Box_Out" Call :FolderToday "DName" FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\??-?????.*" /O:N /B /A:-D`) DO ( Set "FName=%%~nxf" >nul Call XCopy /Y "%BoxIn%\%%~nxf" "%BoxOut%\%%FName:~3,2%%\%DName%\"&&Del "%BoxIn%\%%~nxf" ) Pause Exit /B :FolderToday SetLocal Set "M01=January" Set "M02=February" Set "M03=March" Set "M04=April" Set "M05=May" Set "M06=June" Set "M07=July" Set "M08=August" Set "M09=September" Set "M10=October" Set "M11=November" Set "M12=December" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LocalDateTime /VALUE') DO SET "TDate=%%d" Call Set "TDate=%%M%TDate:~4,2%%%.%TDate:~2,2%\%TDate:~6,2%" EndLocal &Call Set "%~1=%TDate%" Exit /B |
------- Последний раз редактировалось megaloman, 05-09-2020 в 10:03. Отправлено: 15:05, 04-09-2020 | #7 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Большое спасибо, буду пробовать
|
Отправлено: 15:06, 04-09-2020 | #8 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Dyaus, В предыдущем посте при совпадении имён файлы будут переписываться. ИМХО, подозреваю, реально в одном дне совпадений быть не может. Однако, если такое возможно, то
При совпадении имён в одном дне файлы будут переименованы:
имя(1).расширение имя(2).расширение и т д @Echo Off cls Set "BoxIn=Z:\Box_In" Set "BoxOut=Z:\Box_Out" Call :FolderToday "DName" FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\??-?????.*" /O:N /B /A:-D`) DO ( Set "FName=%%~nxf" Call :MyMove "%BoxIn%\%%~nxf" "%BoxOut%\%%FName:~3,2%%\%DName%" ) Pause Exit /B :MyMove Set /A i=0 Set "FFn=%~n1" Set "FFx=%~x1" :Begin If Not Exist "%~2\%FFn%%FFx%" GoTo :Out Set /A i+=1 Set "FFn=%~n1(%i%)" GoTo :Begin :Out If Not "%FFn%%FFx%"=="%~nx1" Ren "%~1" "%FFn%%FFx%" >nul Call XCopy /Y "%BoxIn%\%FFn%%FFx%" "%BoxOut%\%%FName:~3,2%%\%DName%\"&&Del "%BoxIn%\%FFn%%FFx%" Exit /B :FolderToday SetLocal Set "M01=January" Set "M02=February" Set "M03=March" Set "M04=April" Set "M05=May" Set "M06=June" Set "M07=July" Set "M08=August" Set "M09=September" Set "M10=October" Set "M11=November" Set "M12=December" FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LocalDateTime /VALUE') DO SET "TDate=%%d" Call Set "TDate=%%M%TDate:~4,2%%%.%TDate:~2,2%\%TDate:~6,2%" EndLocal &Call Set "%~1=%TDate%" Exit /B |
------- Последний раз редактировалось megaloman, 05-09-2020 в 10:03. Отправлено: 15:56, 04-09-2020 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Dyaus:
|
|
Отправлено: 16:28, 04-09-2020 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - скрипт сравнение файлов и копирования по части имени | mallonih | Скриптовые языки администрирования Windows | 7 | 23-01-2020 09:21 | |
CMD/BAT - [решено] Копирование файлов в папки в зависимости от части имени | nana_MeDBeD | Скриптовые языки администрирования Windows | 2 | 16-08-2017 04:37 | |
CMD/BAT - [решено] извлечение имени файлов, а также части имени с дописанием | Alexander_88 | Скриптовые языки администрирования Windows | 7 | 09-05-2015 01:45 | |
CMD/BAT - перемещение файлов в каталог созданный из части имени файла | surrender1 | Скриптовые языки администрирования Windows | 9 | 10-10-2013 14:42 | |
CMD/BAT - [решено] Сравнение файлов по части имени | sampir | Скриптовые языки администрирования Windows | 2 | 18-11-2012 19:57 |
|