![Как выполнить поиск и замену строки в нескольких HTML-файлах в каталоге и его подкаталогах с помощью Windows CMD?](https://rvso.com/image/1520725/%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D0%B8%20%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%83%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20%D0%B2%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20HTML-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%D1%85%20%D0%B2%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B5%20%D0%B8%20%D0%B5%D0%B3%D0%BE%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0%D1%85%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20Windows%20CMD%3F.png)
Это требование аналогичноКак выполнить поиск и замену строки в нескольких текстовых файлах (в пределах каталога) с помощью Windows CMD? Часть 2
Я хочу выполнить поиск и замену во всех HTML-файлах внутри папки и ее подпапок.
Здесь я беру 2 входных данных, один из которых — путь к файлу, а другой — имя папки в этом пути к файлу по какой-то причине.
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 Заменить текст FindTextX.html на ReplaceTextA.html в папкеА, ReplaceTextB.html в папкеБ, ReplaceTextC.html в папкеС.
Установите "OldStringA=FindTextX.html" Установите "NewStringA=ReplaceTextA.html" Установите "NewStringB=ReplaceTextB.html" Установите "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
Однако это не работает. Я получаю пустой html-файл внутри папкиА,Б&С. Однако это не работает в подпапках.Общийкоторый находится внутри каждой папки A, B и C. Я хочу, чтобы этот скрипт заменил текст в HTML-файлах в папкеА,БиСа также текст внутри ихподпапки. Примечание: мне не нужны никакие дополнительные BAT-файлы, такие как FART, REPLACER и т. д. Мы ценим вашу помощь.