Это обманчиво сложный вопрос.
У 5-летнего ответа PA есть несколько проблем.
1) Цикл FOR начинает итерацию без буферизации всего дерева каталогов, поэтому он потенциально может переименовать файл, который уже был переименован. Я считаю, что именно поэтому файл 7 отсутствует в комментарии r0mmel.
2) Задержка расширения происходит после расширения переменных for, поэтому имя файла будет повреждено, и переименование завершится ошибкой, если имя содержит символ !
.
3) Переименование может завершиться ошибкой, если уже существует файл TWN_CH_INV_VIST_FORM_n.xls с таким же номером.
Сначала я думал, что смогу решить проблему, используя следующее:
@echo off
for /f "delims=: tokens=1*" %%A in (
'dir /b *.xls ^| findstr /n "^"'
) do ren "%%B" "TWN_CH_INV_VIST_FORM_%%A.xls.new"
ren *.txt.new *.
Я использую DIR /B для вывода списка файлов и передаю результат в FINDSTR, чтобы добавить к каждому имени файла префикс номера строки, за которым следует двоеточие.
Затем я использую FOR /F для повторения и анализа результатов в число и имя файла. FOR /F буферизует весь результат перед итерацией, поэтому мне не нужно беспокоиться о переименовании одного и того же файла дважды.
Сначала я даю переименованным файлам «расширение» .xls.new
на тот случай, если в вашем каталоге уже есть файлы, соответствующие шаблону TWN_CH_INV_VIST_FORM_n.xls
. Вам не нужны конфликты имен. Затем последняя команда REN просто удаляет расширение .new
, чтобы оставить желаемое .xls
.
НО, я только что заметил, что исходные имена файлов содержат много странных символов, которые могут включать юникод, которого нет в текущей кодовой странице. FOR /F плохо работает с юникодом.
Есть еще одна незначительная проблема, заключающаяся в том, что приведенное выше число не дополняет число до фиксированной ширины. (это можно было бы решить достаточно легко)
Итак, пришло время раскрыть мою утилиту переименования регулярных выражений JREN.BAT< /а>. Это чистый сценарий (гибридный пакетный / JScript), который изначально запускается на любом компьютере с Windows, начиная с XP. Он имеет встроенное средство для включения числа с фиксированной шириной в новое имя и отлично работает с юникодом. Я по-прежнему временно даю новому имени расширение «.xls.new», чтобы избежать конфликтов имен.
@echo off
call jren "^.*" "'TWN_CH_INV_VIST_FORM_'+$n+'.xls.new'" /j /npad 3 /fm *.xls
ren *.xls.new *.
Я решил дополнить увеличивающееся число до 3 цифр вместо 2, потому что ОП сказал, что может быть 500 файлов.
Полная документация по JREN.BAT доступна из командной строки через jren /?
или jren /??
, если вам нужен постраничный вывод.
15.05.2016