Como pesquisar e substituir uma string em vários arquivos html dentro de um diretório e seus subdiretórios com o Windows CMD?

0

Este requisito é semelhante a Como pesquisar e substituir uma string em vários arquivos de texto (dentro de um diretório) pelo Windows CMD? Parte 2

Eu quero executar Find and Replace em todos os arquivos HTML dentro de uma pasta e suas subpastas.

Aqui estou tomando 2 entradas de 1 das quais é caminho de arquivo & outro é o nome da pasta nesse caminho de arquivo por algum motivo.

set /p INPUT1= Enter Source file path:
set /p INPUT2= Enter Source folder name (**Without any Space**): 

Here let's assume (below folders can change):
INPUT1= D:\!Test\
INPUT2= Folder1

Then path is D:\!Test\Folder1\
Inside Folder1 there are some more folders like:
....Folder1\A\Common\
....Folder1\B\Common\
....Folder1\C\Common\

In above folder **A** as well as folder **Common** have html files.

I have coded this in .cmd file as below:

set /p INPUT1= Enter Source file path: 
set /p INPUT2= Enter Source folder name (**Without any Space**): 

REM Substitua o texto FindTextX.html por ReplaceTextA.html na pasta A , ReplaceTextB.html na pasta B , ReplaceTextC.html na pasta C
.     Defina "OldStringA = FindTextX.html"     Defina "NewStringA = ReplaceTextA.html"     Defina "NewStringB = ReplaceTextB.html"     Definir "NewStringC = ReplaceTextC.html"

@ECHO OFF &SETLOCAL
cd %INPUT1%\%INPUT2%\A\
for %%x in (*.html) do call:process "%%~x"
goto:eof
:process 
set "outFile=%~n1%~x1"  
(for /f "skip=2 delims=" %%a in ('find /n /v "" "%~1"') do (  
    set "ln=%%a"  
    Setlocal enableDelayedExpansion  
    set "ln=!ln:*]=!"  
    if defined ln (
        set "ln=!ln:%OldStringA%=%NewStringA%!"
    )
    echo(!ln!  
    endlocal  
))>"%outFile%"
REM exit /b
REM Come out of A folder
cd..
REM Go inside of B folder
cd B
for %%x in (*.html) do call:process1 "%%~x"
goto:eof
:process1
set "outFile=%~n1%~x1"  
(for /f "skip=2 delims=" %%a in ('find /n /v "" "%~1"') do (  
    set "ln=%%a"  
    Setlocal enableDelayedExpansion  
    set "ln=!ln:*]=!"  
    if defined ln (
        set "ln=!ln:%OldStringB%=%NewStringB%!"  
    )
    echo(!ln!  
    endlocal  
))>"%outFile%"
.......So on for folder **C** .....
exit /b

No entanto, isso não funciona. Eu recebo arquivo html vazio dentro da pasta A , B & C . No entanto, ele não funciona na subpasta comum que está dentro de cada pasta A, B e C. Eu quero que este script substitua o texto em arquivos HTML na pasta A , B e C , bem como texto dentro de suas subpastas . Nota: Eu não quero nenhum arquivo BAT adicional como FART, REPLACER, .... etc. Sua ajuda é apreciada.

    
por Maxim 02.02.2017 / 10:23

0 respostas