#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
это ненужным и быстрее, потому что ему приходится обрабатывать, вероятно, меньше файлов.