Показать полную графическую версию : [решено] Перемещение файлов по папкам по имени
Здравствуйте. Я только начал изучение данного вопроса а проблема требует немедленного решения. В связи с эти большая просьба помочь.
Необходимо переместить файлы в папки. Файлы находятся в одной папке и имеют наименования состоящие из номера и даты, например ПГ 92 07-59480-17 от 02.11.2017.docx
Папки так же уже созданы и имеют наименование из номера и даты, например 07-59480-17 от 02.11.2017
То есть начало имени файла и папки могут отличаться ну и расширение файла в имени папки не присутствует. Перемещать нужно при полном совпадении номера (**-******-**) и даты ДД.ММ.ГГГГ
Заранее спасибо.
я так понял файлы в одной папке, а папки с именами "из номера и даты" - в другой, тогда как-то так
@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\
)
)
Разумеется, если имя папки действительно соответствует именам папок таким образом как описано в первом посте.
Спасибо за помощь. Начало имени файла может отличаться, но может и не отличаться, номер и дата всегда совпадают.
Имя папки более предсказуемо выглядит. Только номер и дата.
Выдает ошибку:
Не удается найти указанный файл
Перемещено файлов: 0
если в именах папок/файлов содержатся кирилические символы - сохранить батник в 866 кодировке (например через NPP (https://notepad-plus-plus.org/download/v7.5.6.html)). Ну и о пробелы традиционно споткнуться можно, настолько их автоматически избегаю, что забываю о том, что они таки имеют место быть, если в именах есть пробелы тогда так:
@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! Слов нет! Дело которое человек делал бы до самой старости, благодаря Вашим знаниям, делается одним (двойным) нажатием на клавишу мыши. Еще раз спасибо!
Оказалось что помимо файлов с датой (ПГ 92 07-59480-17 от 02.11.2017.docx) есть файлы без даты в названии (КФК 07-59480-17.jpg). Данный скрипт их не перемещает так как ищет совпадение с названием папки. Как выбрать первые 11 символов в названии папки ума не приложу...
Большая просьба помочь.
megaloman
14-06-2018, 20:12
Папки ... уже созданы »@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Если номер в имени файла/папки уникален, то есть, он в файле/папке за другой день фигурировать не может, то скрипт упрощается. Логика задачи требует именно этого, раз есть файлы с номером и без даты.
@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
Ошибку выдает:
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
Ошибку выдает: »
См. выше:
сохранить батник в 866 кодировке (например через NPP). »
Но никак не в UTF-8 с BOM.
А ведь я изначально так и сделал. Но NPP изменение кодировки не сохранил пока не сохранил в новый файл. Всё заработало. Огромное спасибо!!!!!!!!!!!
Потому я лично предпочитаю редактор Far Manager'а.
Спасибо! Сегодня уже успел хорошо по-мучиться с кодировками в NPP. Перейду на Far Manager.
Мурат09, на будущее ещё порекомендую вот этот плагин для работы с исходниками: [ESC] Editor's settings changer (https://plugring.farmanager.com/plugin.php?pid=364).
Iska, спасибо. Прямо сейчас загружу и начну пользоваться так как снова столкнулся с проблемами с кодировкой при работе с NPP.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.