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

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

Ветеран


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

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


Тайна "непослушных" файлов.




Глава первая. Разгадка тайны.


Имена Ваших файлов не соответствуют формату 8.3 (то есть число символов в самом имени больше 8-ми, или (и) в нём присутствуют пробелы, неанглийские буквы, неклавиатурные символы или (и) символ "№").

Для интерпретатора Командной строки файлы с такими именами присутствуют как бы в двух ипостасях -- как файл с обычным именем и как файл с коротким именем, оканчивающимся в Вашем случае на "~1".

Поэтому файлы с обычными именами, оканчивающимися на "0" всё-таки перемещаются в папку "0", несмотря на то, что короткие имена Ваших файлов, как уже сказано, оканчиваются на "1" ("~1"), так как в порядке выполнения сценария перемещение в папку "0" является первой командой, а вот все остальные файлы, независимо от того, на что оканчивается обычное имя, перемещаются в папку "1", соответствующую цифре, на которую оканчиваются их короткие имена.

При попытке выполнения команд для перемещения файлов в папки с именами от "2" до "9" происходит ошибка, так как соответствующие файлы уже отсутствуют в исходной папке, будучи перемещёнными ранее.



Глава вторая (и последняя). Что делать?


Нужно стараться не использовать команды с подстановочными знаками из "школьного" курса "батаники".

Вот решение Вашей задачи:

Код: Выделить весь код
@echo off

for /l %%i in (0 1 9) do 2>nul (
 for /f "delims=" %%j in ('dir/a-d/b "*%%i.jpg" "*%%i.txt"^| findstr/irc:"^.*%%i\....$"') do (
  md "%%i"& move "%%j" "%%i\"
 )
)

exit/b 0
.

Последний раз редактировалось Georgio, 21-11-2015 в 11:08. Причина: уточнение.

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

Отправлено: 04:03, 21-11-2015 | #3