1

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

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

Что я хотел бы сделать:

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

1 ответ1

1

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

Это потенциально сложно сделать то, что вы хотите, используя чистый пакет, в зависимости от содержимого вашего файла. Но это легко сделать с помощью гибридной утилиты 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

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