Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение файлов по папкам по имени

Ответить
Настройки темы
CMD/BAT - [решено] Перемещение файлов по папкам по имени

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:47, 08-06-2018

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


я так понял файлы в одной папке, а папки с именами "из номера и даты" - в другой, тогда как-то так
Код: Выделить весь код
@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\
		)
	)
Разумеется, если имя папки действительно соответствует именам папок таким образом как описано в первом посте.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:28, 08-06-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось Мурат09, 08-06-2018 в 11:42. Причина: Дополнение.


Отправлено: 11:39, 08-06-2018 | #3


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 12:02, 08-06-2018 | #4


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:26, 08-06-2018 | #5


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 09:27, 13-06-2018 | #6


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Помогите

Отправлено: 16:32, 14-06-2018 | #7


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата Мурат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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-06-2018 в 21:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:12, 14-06-2018 | #8


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 15:12, 18-06-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Мурат09:
Ошибку выдает: »
См. выше:
Цитата Elven:
сохранить батник в 866 кодировке (например через NPP). »
Но никак не в UTF-8 с BOM.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:19, 18-06-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение файлов по папкам по имени

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Перемещение файлов из списков по разным папкам blither Скриптовые языки администрирования Windows 3 12-04-2016 13:43
CMD/BAT - [решено] Перемещение заданного количества файлов, начиная с первого по имени Alexander_88 Скриптовые языки администрирования Windows 2 27-08-2014 09:54
CMD/BAT - [решено] перемещение файлов , последних по имени Alexander_88 Скриптовые языки администрирования Windows 5 21-08-2014 13:39
CMD/BAT - [решено] Перемещение заданного количества файлов, начиная с последнего по имени Alexander_88 Скриптовые языки администрирования Windows 6 21-08-2014 11:36
CMD/BAT - Раскидывание по папкам (по имени) nameless86 Скриптовые языки администрирования Windows 6 10-06-2014 12:19




 
Переход