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

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

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%

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

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

2 ответа2

1

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

Вы можете использовать команду 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)
1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .