CMD/BAT - [решено] Перемещение файлов по папкам по имени

Аватара пользователя
Мурат09

CMD/BAT - [решено] Перемещение файлов по папкам по имени

Сообщение Мурат09 »

Здравствуйте. Я только начал изучение данного вопроса а проблема требует немедленного решения. В связи с эти большая просьба помочь.

Необходимо переместить файлы в папки. Файлы находятся в одной папке и имеют наименования состоящие из номера и даты, например ПГ 92 07-59480-17 от 02.11.2017.docx

Папки так же уже созданы и имеют наименование из номера и даты, например 07-59480-17 от 02.11.2017

То есть начало имени файла и папки могут отличаться ну и расширение файла в имени папки не присутствует. Перемещать нужно при полном совпадении номера (**-******-**) и даты ДД.ММ.ГГГГ

Заранее спасибо.
Аватара пользователя
Elven

Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени

Сообщение Elven »

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



Код:

Код: Выделить всё

@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 - [решено] Перемещение файлов по папкам по имени

Сообщение Мурат09 »

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

Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени

Сообщение Мурат09 »

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

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

Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени

Сообщение Мурат09 »

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

Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени

Сообщение Мурат09 »

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

Большая просьба помочь.
Аватара пользователя
Мурат09

Re: CMD/BAT - [решено] Перемещение файлов по папкам по имени

Сообщение Мурат09 »

Цитата Мурат09:



Папки ... уже созданы
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 - [решено] Перемещение файлов по папкам по имени

Сообщение Мурат09 »

Ошибку выдает:



Скрытый текст

[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 »

Цитата Мурат09:



Ошибку выдает:
CMD/BAT - [решено] Перемещение файлов по папкам по имени




См. выше:


Цитата Elven:



сохранить батник в 866 кодировке (например через NPP).
CMD/BAT - [решено] Перемещение файлов по папкам по имени




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

Вернуться в «Скриптовые языки администрирования Windows»