![]() |
Перемещение файлов в папки с аналогичными именами
Добрый день.
Пытаюсь написать батник, который будет перебирать файлы в конкретной папке и, используя часть имени файла (а именно фамилию человека), находить уже существующую папку, название которой содержит часть имени файла (фамилию), куда и перемещать указанный файл. Не могу разобраться с форматом записи и как правильно присваивать значения переменным. Код:
cls Прошу строго не судить. |
|
файлы имеют такой формат: "Фамилия_Прием.jpg"
Папки с фамилиями расположены в папке: "C:\Users\VML\OneDrive\ЛИЧНЫЕ ДЕЛА\" и имеют формат "00-00-00 Фамилия". |
londondron,
1. как понять слово Прием в имени файла? Оно неизменно присутствует в каждом имени или это некое слово, которое индивидуально для каждого файла? 2. В имени файла только один символ подчёркивания? 3. А в папке, куда перемещаем файл, не может быть такого же более раннего? 4. А однофамильцы учитываются? 5. А если папки нет, её создавать? А что такое 00-00-00? |
londondron,Вот код по Вашему заданию.
1. Файлы называются *_Прием.jpg Фамилия отделяется символом _ подчёркивания. В фамилии не может быть _ 2. Если в выходной папке уже присутствует файл с совпадающим именем, файл не перемещается 3. Если папки нет, файл не перемещается. Как описАли, так и сделано :) Код:
@Echo Off |
Спасибо!
Все именно так, как Вы написали в последнем посте. Сейчас буду пробовать и разбираться. Потом отпишусь. |
Я понял: Вы разбили каждую строку первого вывода команды DIR на подстроки во втором цикле и получили фамилии, которые в 3-м цикле подставили к маске папок, предназначенных для перемещения. Отлично!
Спасибо, задача решена, и я более менее разобрался в команде FOR, наконец-то понятно, для чего usebackq нужен. Однако, так и не разобрался, хотя хотелось бы, каковы возможности работы с переменными цикла. Вообще можно ли их значения присвоить обычным переменным, затем проводить с этими обычными переменными манипуляции (обрезать, заменять и т.п.) Тогда возможно было бы выполнить эти манипуляции в рамках одного цикла? Или в CMD это невозможно, или будет еще сложнее? Еще раз спасибо. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Получается, что в MOVE задать путь для перемещения файлов маской невозможно, для этого вызывается DIR 2-й раз. Но... 1-й и 2-й FOR я все-таки объединил, т.к. из 1-й команды DIR сразу можно взять фамилии, стоящие до знака "_", а затем подставить их перед маской перемещаемых файлов в MOVE. Без 2-го DIR, при том обстоятельстве, что невозможно использовать маску В ПУТИ НАЗНАЧЕНИЯ КОМАНДЫ MOVE, конечно не обойтись. Вот мой код (здесь переменные цикла немного другие, а %BoxOut2% - заданный путь внутри папки - в вопросе я его, упрощая, не писал, т.к. хотел понять главное) Код:
for /f "usebackq tokens=1 delims=_" %%a in (`dir "%BoxIn%\%MaskIn%" /b /a:-d`) do ( |
londondron, значения переменных цикл можно присвоить обычным переменным, затем проводить с этими обычными переменными манипуляции (обрезать, заменять и т.п.) , например
Код:
@Echo Off |
Цитата:
megaloman, покажите ему ещё разницу при использовании % и !. |
Iska, Я не берусь выступать в роли безусловного авторитета, я не волшебник, я постоянно учусь, в том числе и у Вас :) Если Вы меня натыкАете носом в неточности и ошибки, всегда воспринимаю с благодарностью
londondron, Вот еще пример Код:
@Echo Off |
Цитата:
|
Время: 13:50. |
Время: 13:50.
© OSzone.net 2001-