![]() |
Перемещение файлов из одной папки в разные в зависимости от имени файла
Здравствуйте!
Есть набор файлов с именами вида abcdXXXef.ext в папке C:\Folder1. Требуется переместить их в соответствующие подпапки с именами XXX (т.е. с тем же названием), находящиеся в папке C:\Folder2. Например, файл C:\Folder1\abcd123ef.ext надо переместить в папку C:\Folder2\123, файл C:\Folder1\abcd456ef.ext в папку C:\Folder2\456 и т.д. |
Код:
@echo off |
Я понял задачу чуть иначе: в файлах 9 произвольных символов в имени, три в расширении. Надо их переместить в папки с именами, совпадающими с тремя (4+5+6) символами в имени файла. Решение двумя способами я привожу (один способ отличается от другого только организацией цикла по именам файлов). Ничего нового по сравнению с предыдущим ответом тут нет, но, однако, при этом я в очередной раз наткнулся на не совсем предсказуемую работу команд. У меня был набор следующих файлов в первой директории:
aaa abcd001ef.ext abcd001ef1.ext abcd001eg.ext abcd002ef.ext abcd002ef2.ext abcd002eg.ext bbb dddd В обоих кодах я оставил для отладки строку Echo %1 которую в рабочем режиме можно удалить. Я предполагал, что маска ?????????.??? гарантирует мне выборку файлов с именами в 9 символов. Увы, в обоих способах команда Echo %1 отображает все файлы из приведенного мной списка, хотя там в именах файлов встречается и 10 символов, и три, и четыре. Код:
Echo Off Строки кода Set DDD=%DirName%x If Not %DDD:~0,9%==%DirName% GoTo :Eof позволяют проконтролировать длину имени и добиться от батника ожидаемого результата. |
megaloman, мне думается, проще всего так:
Код:
FOR /f "delims=" %%f IN ('Dir /b /A:-D "%Folder1%" ^| findstr "^.........\....$"') DO |
Цитата:
|
Время: 09:42. |
Время: 09:42.
© OSzone.net 2001-