Это обманчиво сложный вопрос для решения.
У 5-летнего ответа PA есть несколько проблем.
1) Цикл FOR начинает итерацию без буферизации всего дерева каталогов, поэтомуон может переименовать файл, который уже был переименован.Я полагаю, что именно поэтому файл 7 отсутствует в комментарии r0mmel.
2) Отложенное расширение происходит после того, как раскрываются переменные, поэтому имя файла будет повреждено, и переименование будет неудачным, если имя содержит !
символ.
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 не очень хорошо работает с юникодом.
Существует еще одна незначительная проблема, заключающаяся в том, что вышеупомянутое не дополняет число до фиксированной ширины.(это можно было бы решить достаточно легко)
Итак, пришло время отключить мою утилиту переименования регулярных выражений .Это чистый скрипт (гибридный пакет / 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 /??
, если вы хотите вывести на экран вывод.