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

В моих SQL-файлах я жестко закодировал каталог C:\ во все пути выходных файлов, но есть моменты, когда клиент хочет иметь выходы, хранящиеся на E:\ , например.

Как мне сделать это с помощью только партии? Я думал об использовании PowerShell, но он не включен на клиентских машинах.

  • Как использовать `%` в пакетном файле
  • Запуск командного файла при выходе из системы
  • Добавление дня недели к имени файла в пакетном файле
  • Как скопировать список имен файлов в текстовый файл?
  • Пакет рекурсивно удаляет старые файлы Windows
  • Сделайте что-нибудь каждые 10 секунд командного файла
  • Что я хотел бы сделать:

    1. Рекурсивно просматривайте все каталоги.
    2. В каждом каталоге найдите C:\ и замените на E:\ .

  • Как использовать `%` в пакетном файле
  • Пакет рекурсивно удаляет старые файлы Windows
  • Добавление дня недели к имени файла в пакетном файле
  • Как скопировать список имен файлов в текстовый файл?
  • Запуск командного файла при выходе из системы
  • Сделайте что-нибудь каждые 10 секунд командного файла
  • One Solution collect form web for “Как использовать пакетный файл для рекурсивной замены строки в файлах?”

    Yuck, слепо делать оптовую замену, как это на всей структуре дерева каталогов, заставит меня нервничать. Но если вы считаете, что это безопасно …

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

    Предполагая, что у вас есть REPL.BAT в вашем текущем каталоге, или еще лучше, где-то внутри вашего PATH, следующий простой один лайнер должен выполнить трюк непосредственно из командной строки, не требуя пакетной обработки.

     for /r %F in (*.sql) do @(type "%F"|repl "C:\" "E:\" >"%F.new"&move /y "%F.new" "%F" L >nul) 

    Вы можете сделать регистр поиска нечувствительным, добавив переключатель I

     for /r %F in (*.sql) do @(type "%F"|repl "C:\" "E:\" I >"%F.new"&move /y "%F.new" "%F" L >nul) 

    Или, если вы предпочитаете пакетный скрипт (с I переключателем)

     @echo off for /r %%F in (*.sql) do ( type "%%F"|repl "C:\" "E:\" LI >"%%F.new" move /y "%%F.new" "%%F" >nul ) 

    Я использовал L буквальный переключатель на всем протяжении; Другой вариант – выйти из \ вместо.

     repl "C:\\" "E:\\" I 
    Давайте будем гением компьютера.