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

Показать сообщение отдельно

Ветеран


Contributor


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

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


Я понял задачу чуть иначе: в файлах 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 Folder1=D:\Delete\Folder1
Set Folder2=D:\Delete\Folder2

FOR %%f IN ("%Folder1%\?????????.???") DO Call :MoveXXX "%%f"
GoTo :Eof

:MoveXXX
Echo %1

Set DirName=%~n1
Set DDD=%DirName%x
If Not %DDD:~0,9%==%DirName% GoTo :Eof

Set DirName=%DirName:~4,3%

If Not Exist "%Folder1%\????%DirName%??.???" GoTo :Eof

If Not Exist "%Folder2%\%DirName%" Md "%Folder2%\%DirName%" 
Move /Y "%Folder1%\????%DirName%??.???" "%Folder2%\%DirName%\" >NUL
Второй способ
читать дальше »
Код: Выделить весь код
Echo Off
Set Folder1=D:\Delete\Folder1
Set Folder2=D:\Delete\Folder2

FOR /F "usebackq delims=" %%f IN (`Dir /b /A:-D "%Folder1%\?????????.???"`) DO Call :MoveXXX "%%f"
GoTo :Eof

:MoveXXX
....... 
Далее то же, что и в предыдущем случае.
Команда Dir в командном окне с приведённой маской выдаёт такой же неверный результат.

Строки кода
Set DDD=%DirName%x
If Not %DDD:~0,9%==%DirName% GoTo :Eof
позволяют проконтролировать длину имени и добиться от батника ожидаемого результата.

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


Последний раз редактировалось megaloman, 19-09-2011 в 17:04.

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

Отправлено: 15:57, 19-09-2011 | #3