Porra, fazer cegamente uma substituição por atacado como essa em uma estrutura de árvore de diretório inteira me deixaria nervosa. Mas se você acha que é seguro ...
É potencialmente complicado fazer o que você deseja usando o lote puro, dependendo do conteúdo do arquivo. Mas é fácil fazer com um utilitário JScript / batch híbrido que escrevi chamado REPL.BAT. O utilitário executa a pesquisa de regex e substitui o stdin e grava o resultado em stdout. É um script puro que é executado em qualquer máquina moderna do Windows a partir do XP, portanto, não requer a instalação de nenhum arquivo .exe
de terceiros. O utilitário REPL.BAT e a documentação estão disponíveis aqui. .
Supondo que você tenha o REPL.BAT em seu diretório atual, ou melhor ainda, em algum lugar dentro de seu PATH, então o simples liner a seguir deve fazer o truque diretamente da linha de comando, sem necessidade de lote.
for /r %F in (*.sql) do @(type "%F"|repl "C:\" "E:\" >"%F.new"&move /y "%F.new" "%F" L >nul)
Você pode tornar o caso de pesquisa insensível, adicionando a opção I
.
for /r %F in (*.sql) do @(type "%F"|repl "C:\" "E:\" I >"%F.new"&move /y "%F.new" "%F" L >nul)
Ou se preferir um script em lote (com I
switch)
@echo off
for /r %%F in (*.sql) do (
type "%%F"|repl "C:\" "E:\" LI >"%%F.new"
move /y "%%F.new" "%%F" >nul
)
Eu usei a opção L
literal por toda parte; a outra opção é escapar do \
.
repl "C:\" "E:\" I