Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Перемещение файлов по папкам по имени (http://forum.oszone.net/showthread.php?t=335240)

Мурат09 08-06-2018 10:47 2817397

Перемещение файлов по папкам по имени
 
Здравствуйте. Я только начал изучение данного вопроса а проблема требует немедленного решения. В связи с эти большая просьба помочь.
Необходимо переместить файлы в папки. Файлы находятся в одной папке и имеют наименования состоящие из номера и даты, например ПГ 92 07-59480-17 от 02.11.2017.docx
Папки так же уже созданы и имеют наименование из номера и даты, например 07-59480-17 от 02.11.2017
То есть начало имени файла и папки могут отличаться ну и расширение файла в имени папки не присутствует. Перемещать нужно при полном совпадении номера (**-******-**) и даты ДД.ММ.ГГГГ
Заранее спасибо.

Elven 08-06-2018 11:28 2817405

я так понял файлы в одной папке, а папки с именами "из номера и даты" - в другой, тогда как-то так
Код:

@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 08-06-2018 11:39 2817411

Спасибо за помощь. Начало имени файла может отличаться, но может и не отличаться, номер и дата всегда совпадают.
Имя папки более предсказуемо выглядит. Только номер и дата.
Выдает ошибку:
Не удается найти указанный файл
Перемещено файлов: 0

Elven 08-06-2018 12:02 2817414

если в именах папок/файлов содержатся кирилические символы - сохранить батник в 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\"
                )
        )


Мурат09 08-06-2018 13:26 2817438

Огромное спасибо Elven! Слов нет! Дело которое человек делал бы до самой старости, благодаря Вашим знаниям, делается одним (двойным) нажатием на клавишу мыши. Еще раз спасибо!

Мурат09 13-06-2018 09:27 2818066

Оказалось что помимо файлов с датой (ПГ 92 07-59480-17 от 02.11.2017.docx) есть файлы без даты в названии (КФК 07-59480-17.jpg). Данный скрипт их не перемещает так как ищет совпадение с названием папки. Как выбрать первые 11 символов в названии папки ума не приложу...
Большая просьба помочь.

Мурат09 14-06-2018 16:32 2818254

:( Помогите :(

megaloman 14-06-2018 20:12 2818276

Цитата:

Цитата Мурат09
Папки ... уже созданы »

Код:

@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


Мурат09 18-06-2018 15:12 2818617

Ошибку выдает:
Скрытый текст

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

Iska 18-06-2018 15:19 2818619

Цитата:

Цитата Мурат09
Ошибку выдает: »

См. выше:
Цитата:

Цитата Elven
сохранить батник в 866 кодировке (например через NPP). »

Но никак не в UTF-8 с BOM.

Мурат09 18-06-2018 15:30 2818621

А ведь я изначально так и сделал. Но NPP изменение кодировки не сохранил пока не сохранил в новый файл. Всё заработало. Огромное спасибо!!!!!!!!!!!

Iska 18-06-2018 15:53 2818622

Потому я лично предпочитаю редактор Far Manager'а.

Мурат09 18-06-2018 16:56 2818635

Спасибо! Сегодня уже успел хорошо по-мучиться с кодировками в NPP. Перейду на Far Manager.

Iska 18-06-2018 17:13 2818638

Мурат09, на будущее ещё порекомендую вот этот плагин для работы с исходниками: [ESC] Editor's settings changer.

Мурат09 27-06-2018 09:57 2819647

Iska, спасибо. Прямо сейчас загружу и начну пользоваться так как снова столкнулся с проблемами с кодировкой при работе с NPP.


Время: 01:04.

Время: 01:04.
© OSzone.net 2001-