Это требование похоже на Как искать и заменять строку в нескольких текстовых файлах (в каталоге) на Windows CMD?Часть 2
Я хочу выполнить поиск и замену всех файлов HTML внутри папки и ее подпапок.
Здесь я беру 2 входа, из которых 1 - путь к файлу, а другой - по какой-то причине имя папки в этом пути к файлу.
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 в папке A, ReplaceTextB.html в папке B, ReplaceTextC.html в папке C.
Set "OldStringA = FindTextX.html" Set "NewStringA = ReplaceTextA.html" Set "NewStringB = ReplaceTextB.html" Set "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. Однако он не работает с подпапкой Common, которая находится внутри каждой папки A, B и C. Я хочу, чтобы этот скрипт заменял текст в файлах HTML в папках A, B и C, а также текст в их подпапках. Примечание: я не хочу никаких дополнительных файлов BAT, таких как FART, REPLACER и т.д. И т.д. Ваша помощь приветствуется.