![¿Cómo buscar y reemplazar una cadena en varios archivos html dentro de un directorio y sus subdirectorios con Windows CMD?](https://rvso.com/image/1520725/%C2%BFC%C3%B3mo%20buscar%20y%20reemplazar%20una%20cadena%20en%20varios%20archivos%20html%20dentro%20de%20un%20directorio%20y%20sus%20subdirectorios%20con%20Windows%20CMD%3F.png)
Este requisito es similar a¿Cómo buscar y reemplazar una cadena en varios archivos de texto (dentro de un directorio) con Windows CMD? Parte 2
Quiero realizar Buscar y reemplazar en todos los archivos HTML dentro de una carpeta y sus subcarpetas.
Aquí estoy tomando 2 entradas de las cuales 1 es la ruta del archivo y otra es el nombre de la carpeta en esa ruta del archivo por alguna razón.
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 Reemplace el texto FindTextX.html con ReemplazoTextA.html en la carpetaA, ReemplaceTextB.html en la carpetaB, ReemplaceTextC.html en la carpetaC.
Establecer "OldStringA=FindTextX.html" Establecer "NewStringA=ReplaceTextA.html" Establecer "NewStringB=ReplaceTextB.html" Establecer "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
Sin embargo, esto no funciona. Obtengo un archivo html vacío dentro de la carpetaA,B&C. Sin embargo, no funciona en la subcarpeta.Comúnque está dentro de cada carpeta A, B y C. Quiero que este script reemplace el texto en archivos HTML en la carpetaA,ByCasí como texto dentro de susubcarpetas. Nota: No quiero ningún archivo BAT adicional como FART, REPLACER, .... etc. Tu ayuda es apreciada.