1

Я пытался искать предыдущие вопросы, но ни один из них не работал, или я не мог адаптировать их к своим потребностям.

Я хочу написать скрипт, который запрашивает:

  • папка
  • критерии
  • старая строка
  • новая строка

И замените каждый файл в указанной папке и подпапках (и вынудите пользователя ввести один) с определенными критериями (например, это должен быть файл «.cue»), и:

  1. Если файл только для чтения, отключите его.
  2. Найдите указанную старую строку в содержимом файла, замените ее новой строкой и сохраните изменения в том же файле.
  3. Если файл был только для чтения, включите его снова.

У меня пока есть этот код, но я не знаю, что делать в части do :

@echo off 

setLocal enableDELAYedexpansion

:START
set "var2="
set /P var2="type folder "

if "%var2%"=="" goto ERROR

set /p old="old string ? "
set /p new="new string ? "
set /p files="what criteria ? "
echo modifying files...

for /r "%var2%" %%v in (%%files) do (

???

)
pause

goto START

:ERROR
echo type something!!
goto START

1 ответ1

2

Используйте FOR /F с DIR /B /S / ADR, чтобы получить файлы, для которых не установлен флаг только для чтения.

Затем используйте любой из нескольких опубликованных методов для изменения текстового файла. Я предпочитаю использовать гибридную утилиту JScript/batch REPL.BAT, которая выполняет поиск и замену регулярных выражений в stdin и записывает результат в стандартный вывод. Это чистый нативный скрипт, который запускается на любой современной машине с Windows начиная с XP - сторонний исполняемый файл не требуется. Полная документация встроена в скрипт.

Опция L вызывает поиск литералов, а опция V получает значения поиска и замены из переменных, а не из строковых литералов.

Предполагая REPL.BAT в вашей текущей папке, или еще лучше, где-то в вашем пути:

@echo off
setlocal

:START
set "var2="
set /P var2="type folder "

if "%var2%"=="" goto ERROR

set /p old="old string ? "
set /p new="new string ? "
set /p files="what criteria ? "

for /f "delims=" %%F in ('dir /b /s /a-d-r "%var2%\%files%" 2^>nul') do (
  echo modifying %%F
  type "%%F" | repl old new lv >"%%F.new"
  move /y "%%F.new" "%%F" >nul
)

pause

exit /b

:ERROR
echo type something!!
goto START

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .