Поиск и добавление текста в имени файла

#batch-file #pdf #cmd

#пакетный файл #PDF #cmd

Вопрос:

Мне нужен пакетный файл для поиска фразы «Ch_XX» и добавления с ним «Ch_XX_Pg» в PDF-файлы.

Имя файла моих PDF-файлов выглядит следующим образом…

 01_Vig12345_ch01_001-020.pdf
02_Vig12345_ch02_021-046.pdf
03_Vig12345_ch03_047-078.pdf
  

Для этих файлов выходные данные должны быть…

 01_Vig12345_ch01_pg001-020.pdf
02_Vig12345_ch02_pg021-046.pdf
03_Vig12345_ch03_pg047-078.pdf
  

Если имя файла не содержит «CH», это «pg» не должно добавляться.

Ответ №1:

 @echo off
setlocal disableDelayedExpansion
for %%F in (*_ch??_???-???.pdf) do (
  set "name=%%F"
  setlocal enableDelayedExpansion
  ren "!name!" "!name:~0,-11!pg!name:~-11!"
  endlocal
)
  

Отложенное расширение включается и выключается в цикле, чтобы защитить все ! , что может быть в имени файла (маловероятно, но возможно).

Переименованный файл не может соответствовать маске файла в цикле FOR, поэтому нет риска переименования файла дважды.

Но если задан сценарий, в котором новое имя может соответствовать маске для файла, то один запуск может переименовать файл дважды. В таком случае цикл FOR должен быть изменен на FOR /F, обрабатывающий команду DIR /B.