此要求类似于如何使用 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.htmlA,文件夹中的 ReplaceTextB.html乙,文件夹中的 ReplaceTextC.htmlC.
设置“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,乙&C。但是它不适用于子文件夹常见的位于 A、B 和 C 文件夹中。我希望此脚本替换文件夹下的 HTML 文件中的文本A,乙和C以及其内部的文字子文件夹。 注意:我不需要任何额外的 BAT 文件,如 FART、REPLACER 等等。 非常感谢您的帮助。