CMD/BAT - [решено] Перемещение файлов по папкам по имени
-
Мурат09
CMD/BAT - [решено] Перемещение файлов по папкам по имени
Здравствуйте. Я только начал изучение данного вопроса а проблема требует немедленного решения. В связи с эти большая просьба помочь.
Необходимо переместить файлы в папки. Файлы находятся в одной папке и имеют наименования состоящие из номера и даты, например ПГ 92 07-59480-17 от 02.11.2017.docx
Папки так же уже созданы и имеют наименование из номера и даты, например 07-59480-17 от 02.11.2017
То есть начало имени файла и папки могут отличаться ну и расширение файла в имени папки не присутствует. Перемещать нужно при полном совпадении номера (**-******-**) и даты ДД.ММ.ГГГГ
Заранее спасибо.
Необходимо переместить файлы в папки. Файлы находятся в одной папке и имеют наименования состоящие из номера и даты, например ПГ 92 07-59480-17 от 02.11.2017.docx
Папки так же уже созданы и имеют наименование из номера и даты, например 07-59480-17 от 02.11.2017
То есть начало имени файла и папки могут отличаться ну и расширение файла в имени папки не присутствует. Перемещать нужно при полном совпадении номера (**-******-**) и даты ДД.ММ.ГГГГ
Заранее спасибо.
-
Elven
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
я так понял файлы в одной папке, а папки с именами "из номера и даты" - в другой, тогда как-то так
Код:
Разумеется, если имя папки действительно соответствует именам папок таким образом как описано в первом посте.
Код:
Код: Выделить всё
@echo off
set files=d:\files
set folders=d:\folders
for /f %%i in ('dir "%folders%" /a:d /b') do (
for /f %%j in ('dir "%files%" /a:-d /b ^| find /i "%%i"') do (
move %files%\%%j %folders%\%%i\
)
)Разумеется, если имя папки действительно соответствует именам папок таким образом как описано в первом посте.
-
Мурат09
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
А ведь я изначально так и сделал. Но NPP изменение кодировки не сохранил пока не сохранил в новый файл. Всё заработало. Огромное спасибо!!!!!!!!!!!
-
Мурат09
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
если в именах папок/файлов содержатся кирилические символы - сохранить батник в 866 кодировке (например через
Код:
NPP
). Ну и о пробелы традиционно споткнуться можно, настолько их автоматически избегаю, что забываю о том, что они таки имеют место быть, если в именах есть пробелы тогда так:Код:
Код: Выделить всё
@echo off
set files=d:\files
set folders=d:\folders
for /f "delims=" %%i in ('dir "%folders%" /a:d /b') do (
for /f "delims=" %%j in ('dir "%files%" /a:-d /b ^| find /i "%%i"') do (
move "%files%\%%j" "%folders%\%%i\"
)
)-
Elven
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
Огромное спасибо Elven! Слов нет! Дело которое человек делал бы до самой старости, благодаря Вашим знаниям, делается одним (двойным) нажатием на клавишу мыши. Еще раз спасибо!
-
Мурат09
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
Огромное спасибо Elven! Слов нет! Дело которое человек делал бы до самой старости, благодаря Вашим знаниям, делается одним (двойным) нажатием на клавишу мыши. Еще раз спасибо!
-
Мурат09
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
Оказалось что помимо файлов с датой (ПГ 92 07-59480-17 от 02.11.2017.docx) есть файлы без даты в названии (КФК 07-59480-17.jpg). Данный скрипт их не перемещает так как ищет совпадение с названием папки. Как выбрать первые 11 символов в названии папки ума не приложу...
Большая просьба помочь.
Большая просьба помочь.
-
Мурат09
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
Цитата Мурат09:
Папки ... уже созданы
Код:
ИМХО, задача требует уточнение
[spoiler]Если номер в имени файла/папки уникален, то есть, он в файле/папке за другой день фигурировать не может, то скрипт упрощается. Логика задачи требует именно этого, раз есть файлы с номером и без даты.
Код: [/spoiler]
Папки ... уже созданы
CMD/BAT - [решено] Перемещение файлов по папкам по имени
Код:
Код: Выделить всё
@Echo Off
Set "BoxFile=Z:\Box_In"
Set "Folders=Z:\Box_Out\??-?????-?? от ??.??.????"
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%Folders%" /A:D /B /O:-D /T:W`) DO Set "Ndir=%%d" &Call :Separ "%Folders%" "%%d"
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%Folders%" /A:D /B /O:-D /T:W`) DO Set "Ndir=%%d" &Call :Separ "%Folders%" "%%d" %%Ndir:~0,-14%%
GoTo :Eof
:Separ
If "%~3"=="" (
If Exist "%BoxFile%\*%~2.*" >nul 2>&1 Move /Y "%BoxFile%\*%~2.*" "%~dp1%~2\"
) Else (
If Exist "%BoxFile%\*%~3.*" >nul 2>&1 Move /Y "%BoxFile%\*%~3.*" "%~dp1%~2\"
)
GoTo :EofИМХО, задача требует уточнение
[spoiler]Если номер в имени файла/папки уникален, то есть, он в файле/папке за другой день фигурировать не может, то скрипт упрощается. Логика задачи требует именно этого, раз есть файлы с номером и без даты.
Код: [/spoiler]
Код: Выделить всё
@Echo Off
Set "BoxFile=Z:\Box_In"
Set "Folders=Z:\Box_Out\??-?????-?? от ??.??.????"
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%Folders%" /A:D /B /O:-D /T:W`) DO Set "Ndir=%%d" &Call :Separ "%Folders%" "%%d" %%Ndir:~0,-14%%
GoTo :Eof
:Separ
If Exist "%BoxFile%\*%~3*.*" >nul 2>&1 Move /Y "%BoxFile%\*%~3*.*" "%~dp1%~2\"
GoTo :Eof-
Мурат09
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
Ошибку выдает:
Скрытый текст
[spoiler]d:\>5.bat
d:\>я╗┐@echo off
"я╗┐@echo" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
d:\>Set "BoxFile=D:\files"
d:\>Set "Folders=D:\folders\??-?????-?? ╨╛╤В ??.??.????"
d:\>FOR /F "usebackq delims=" %d IN (`2>nul Dir "D:\folders\??-?????-?? ╨╛╤В ??.
??.????" /A:D /B /O:-D /T:W`) DO Set "Ndir=%d" & Call :Separ "D:\folders\??-??
???-?? ╨╛╤В ??.??.????" "%d"
d:\>FOR /F "usebackq delims=" %d IN (`2>nul Dir "D:\folders\??-?????-?? ╨╛╤В ??.
??.????" /A:D /B /O:-D /T:W`) DO Set "Ndir=%d" & Call :Separ "D:\folders\??-??
???-?? ╨╛╤В ??.??.????" "%d" %Ndir:~0,-14%
d:\>GoTo :Eof[/spoiler]
Скрытый текст
[spoiler]d:\>5.bat
d:\>я╗┐@echo off
"я╗┐@echo" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
d:\>Set "BoxFile=D:\files"
d:\>Set "Folders=D:\folders\??-?????-?? ╨╛╤В ??.??.????"
d:\>FOR /F "usebackq delims=" %d IN (`2>nul Dir "D:\folders\??-?????-?? ╨╛╤В ??.
??.????" /A:D /B /O:-D /T:W`) DO Set "Ndir=%d" & Call :Separ "D:\folders\??-??
???-?? ╨╛╤В ??.??.????" "%d"
d:\>FOR /F "usebackq delims=" %d IN (`2>nul Dir "D:\folders\??-?????-?? ╨╛╤В ??.
??.????" /A:D /B /O:-D /T:W`) DO Set "Ndir=%d" & Call :Separ "D:\folders\??-??
???-?? ╨╛╤В ??.??.????" "%d" %Ndir:~0,-14%
d:\>GoTo :Eof[/spoiler]
-
Мурат09
Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени
Цитата Мурат09:
Ошибку выдает:
См. выше:
Цитата Elven:
сохранить батник в 866 кодировке (например через NPP).
Но никак не в UTF-8 с BOM.
Ошибку выдает:
CMD/BAT - [решено] Перемещение файлов по папкам по имени
См. выше:
Цитата Elven:
сохранить батник в 866 кодировке (например через NPP).
CMD/BAT - [решено] Перемещение файлов по папкам по имени
Но никак не в UTF-8 с BOM.