Проблемы с добавлением префикса к именам файлов с использованием командного файла

2565
Hannibal83

Я пытаюсь добавить префикс для всех имен файлов в папке.

После нескольких дней поиска в интернете я действительно нашел что-то, что почти идеально работает:

echo Please specify fileprefix echo Your Choise?? set /p pre= ^ for %%i in (*.txt) do ren %%i "%pre%"%%i 

Проблема в том, что если префикс начинается с символа, который находится в алфавитном порядке после первого символа имени файла, то первый файл переименовывается дважды.

Вот результат при попытке переименовать три файла 1.txt, 2.txtи 3.txt в папке теста:

Your Choise?? pre  D:\rntest>ren 1.txt "pre"1.txt  D:\rntest>ren 2.txt "pre"2.txt  D:\rntest>ren 3.txt "pre"3.txt  D:\rntest>ren pre1.txt "pre"pre1.txt 

Оставив меня с тремя файлами pre2.txt, pre3.txtиprepre1.txt

Кажется, проблема в том, что первые файлы сортируются автоматически по алфавиту в процессе. Таким образом, первый файл перемещается в нижнюю часть и обрабатывается снова. Однако я понятия не имею, так ли это на самом деле.

Я попытался поиграться с отладкой, чтобы переименовать файл снова после первоначального переименования.

Вот код

for %%i in ("%pre%""%pre%"*) do ren %%i %%i:~3% 

Кажется, это идентифицирует правильное (с двойным префиксом) имя файла, но оно ничего не делает с ним (имя файла не существует или уже существует идентичное имя файла). Предполагалось удалить первые три символа имени файла, чтобы получить правильный результат.

Я просто подумал, что должен быть какой-то лучший / более простой способ сделать это без необходимости проверки ошибок и исправления.

0
По крайней мере, вы не пометили этот вопрос "ms-dos" :) Добро пожаловать в Stack Exchange и SuperUser. a CVn 9 лет назад 0
Простым решением было бы предварительно обработать папку, создав массив файлов для переименования. После этого вы можете взаимодействовать с массивом, переименовывая файлы. В противном случае вы работаете с меняющимся набором. Я не могу проверить [это предложение] (http://stackoverflow.com/a/19542051/1584762) (на мобильном телефоне), но, похоже, вы сможете легко его принять. nerdwaller 9 лет назад 0

2 ответа на вопрос

1
Alex

РЕДАКТИРОВАТЬ: похоже, что ботаник комментирует о

Вы можете использовать dirкоманду в for /fцикле, чтобы получить ожидаемое поведение следующим образом:

@echo off echo Please specify fileprefix echo Your Choise?? set /p pre= for /f "tokens=1* delims=" %%i in ('dir /b /o:-n /a:-d *.txt') do ren "%%i" "%pre%%%i" 

dir Командные переключатели объяснили:

/b - Uses bare format (no heading information or summary). /o:-n - Sort backwards (helps when you have file named similar names like 1.txt and 11.txt) /a:-d - Don't give any directories (give files only) 
Большое спасибо, это работает как шарм :), и я почти понимаю весь код: D Hannibal83 9 лет назад 0
1
PatrickOfLondon

Я нашел очень мощную бесплатную утилиту Bulk Rename Utility для изменения имен файлов Windows.

Это работает очень хорошо, и я пожертвовал немного денег через PayPal;