Проблемы с добавлением префикса к именам файлов с использованием командного файла
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%
Кажется, это идентифицирует правильное (с двойным префиксом) имя файла, но оно ничего не делает с ним (имя файла не существует или уже существует идентичное имя файла). Предполагалось удалить первые три символа имени файла, чтобы получить правильный результат.
Я просто подумал, что должен быть какой-то лучший / более простой способ сделать это без необходимости проверки ошибок и исправления.
По крайней мере, вы не пометили этот вопрос "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;