|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Перемещение файлов в папки с аналогичными именами |
|
|
CMD/BAT - Перемещение файлов в папки с аналогичными именами
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать Добрый день.
Пытаюсь написать батник, который будет перебирать файлы в конкретной папке и, используя часть имени файла (а именно фамилию человека), находить уже существующую папку, название которой содержит часть имени файла (фамилию), куда и перемещать указанный файл. Не могу разобраться с форматом записи и как правильно присваивать значения переменным. cls chcp 1251 @echo off set "tr=C:\Users\VML\OneDrive\Приказы" - это я упрощаю использование пути for %%a in ("%tr%"\*.jpg) do ( - перебор файлов jpeg set "fn=%%a" - присваиваю новой переменной значение переменной из for, чтобы из нее м.б. извлечь фамилию set "sn=%%fn:%tr%=%%" - первым делом пытаюсь удалить путь к файлу, чтобы осталось только его имя, НО ЗДЕСЬ в итоге ничего и не получается echo %sn% ) set tr= - удаляю использованные переменные set sn= set fn= Прошу строго не судить. |
|
Отправлено: 13:49, 21-03-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:32, 21-03-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать файлы имеют такой формат: "Фамилия_Прием.jpg"
Папки с фамилиями расположены в папке: "C:\Users\VML\OneDrive\ЛИЧНЫЕ ДЕЛА\" и имеют формат "00-00-00 Фамилия". |
Отправлено: 14:45, 21-03-2017 | #3 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать londondron,
1. как понять слово Прием в имени файла? Оно неизменно присутствует в каждом имени или это некое слово, которое индивидуально для каждого файла? 2. В имени файла только один символ подчёркивания? 3. А в папке, куда перемещаем файл, не может быть такого же более раннего? 4. А однофамильцы учитываются? 5. А если папки нет, её создавать? А что такое 00-00-00? |
------- Последний раз редактировалось megaloman, 21-03-2017 в 19:55. Отправлено: 19:36, 21-03-2017 | #4 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать londondron,Вот код по Вашему заданию.
1. Файлы называются *_Прием.jpg Фамилия отделяется символом _ подчёркивания. В фамилии не может быть _ 2. Если в выходной папке уже присутствует файл с совпадающим именем, файл не перемещается 3. Если папки нет, файл не перемещается. Как описАли, так и сделано @Echo Off chcp 1251 >nul Set "BoxIn=Z:\Users\VML\OneDrive\Приказы" Set "MaskIn=*_Прием.jpg" Set "BoxOut=Z:\Users\VML\OneDrive\ЛИЧНЫЕ ДЕЛА" Set "MaskOut=??-??-?? " FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%MaskIn%" /B /A:-D 2^>nul`) DO ( FOR /F "tokens=1 delims=_" %%i IN ("%%f") DO ( FOR /F "usebackq delims=" %%d IN (`Dir "%BoxOut%\%MaskOut%%%i" /B /A:D 2^>nul`) DO ( Move "%BoxIn%\%%f" "%BoxOut%\%%d\" >nul ) ) ) |
|
------- Отправлено: 20:40, 21-03-2017 | #5 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Спасибо!
Все именно так, как Вы написали в последнем посте. Сейчас буду пробовать и разбираться. Потом отпишусь. |
Отправлено: 06:44, 22-03-2017 | #6 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Я понял: Вы разбили каждую строку первого вывода команды DIR на подстроки во втором цикле и получили фамилии, которые в 3-м цикле подставили к маске папок, предназначенных для перемещения. Отлично!
Спасибо, задача решена, и я более менее разобрался в команде FOR, наконец-то понятно, для чего usebackq нужен. Однако, так и не разобрался, хотя хотелось бы, каковы возможности работы с переменными цикла. Вообще можно ли их значения присвоить обычным переменным, затем проводить с этими обычными переменными манипуляции (обрезать, заменять и т.п.) Тогда возможно было бы выполнить эти манипуляции в рамках одного цикла? Или в CMD это невозможно, или будет еще сложнее? Еще раз спасибо. |
Отправлено: 07:43, 22-03-2017 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата londondron:
Цитата londondron:
Цитата londondron:
Цитата londondron:
|
||||
Отправлено: 07:51, 22-03-2017 | #8 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Iska:
Получается, что в MOVE задать путь для перемещения файлов маской невозможно, для этого вызывается DIR 2-й раз. Но... 1-й и 2-й FOR я все-таки объединил, т.к. из 1-й команды DIR сразу можно взять фамилии, стоящие до знака "_", а затем подставить их перед маской перемещаемых файлов в MOVE. Без 2-го DIR, при том обстоятельстве, что невозможно использовать маску В ПУТИ НАЗНАЧЕНИЯ КОМАНДЫ MOVE, конечно не обойтись. Вот мой код (здесь переменные цикла немного другие, а %BoxOut2% - заданный путь внутри папки - в вопросе я его, упрощая, не писал, т.к. хотел понять главное) |
|||
Отправлено: 10:48, 22-03-2017 | #9 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать londondron, значения переменных цикл можно присвоить обычным переменным, затем проводить с этими обычными переменными манипуляции (обрезать, заменять и т.п.) , например
|
------- Отправлено: 12:52, 22-03-2017 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Создание папок на основе имен файлов и перемещение файлов в эти папки | mezzin | Скриптовые языки администрирования Windows | 4 | 10-12-2016 21:11 | |
VBS/WSH/JS - [решено] перемещение N файлов из папки в папку | Romano | Скриптовые языки администрирования Windows | 5 | 06-12-2011 21:08 | |
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла | Sarge81 | Скриптовые языки администрирования Windows | 4 | 20-09-2011 04:20 | |
VBS/WSH/JS - Перемещение файлов и папок в разные папки... | WalkManX | Скриптовые языки администрирования Windows | 0 | 07-08-2011 22:37 | |
CMD/BAT - [решено] Перемещение устаревших файлов из папки в резервную папку | zavoruev | Скриптовые языки администрирования Windows | 22 | 28-05-2010 14:04 |
|