Как я могу искать и заменять определенный текст в имени файла для нескольких файлов с различными расширениями?

#batch-file

Вопрос:

У меня есть папка, в которой содержатся файлы с различными расширениями (т. Е. .xls,. xlsx,. txt,. csv). Каждый из этих файлов содержит строку текста с одинаковым названием.

  • ТАК_ТЕСТ SOEntry.xls
  • Покупка TEST.xlsx
  • ТЕСТ Log.txt
  • X ТЕСТОВАЯ загрузка.csv

Цель здесь состоит в том, чтобы заменить все «ТЕСТОВЫЕ» строки на «ЖИВЫЕ»

Я видел публикации в Интернете, в которых говорится о поиске и замене в текстовом файле, но мне трудно найти тот, который делает это для имен файлов, оптом.

У меня есть код ниже, который, как я надеялся, может помочь, но он предназначен только для расширений файлов, и что-то подсказывает мне, что для его работы могут потребоваться некоторые незначительные изменения. Я просто не знаю, что:

Это был предыдущий код (который переименовывает только расширения):

 forfiles /P D:CompanyDataTEST /S /M *.csv /C "cmd /c rename @file @fname.TXT"
 

Когда я попытался изменить его для поиска определенной строки, это не сработало:

 forfiles /P D:CompanyDataTEST /S /M *TEST.* /C "cmd /c rename @file @fname*LIVE.*"
 

Ответ №1:

Вы можете использовать подстановку строк для изменения имен файлов в текущем каталоге:

 @echo off

setlocal enabledelayedexpansion

for %%a in (*) do (
    set old_fn=%%a
    set new_fn=!old_fn:TEST=LIVE!
    if not "!old_fn!" == "!new_fn!" (
        echo "!old_fn!" to "!new_fn!"
        ren "!old_fn!" "!new_fn!"
    )
)
 

Комментарии:

1. for %%a in (*test*) do... делает if это ненужным и быстрее, потому что ему приходится обрабатывать, вероятно, меньше файлов.