![Windows CMD を使用して、ディレクトリとそのサブディレクトリ内の複数の HTML ファイル内の文字列を検索および置換するにはどうすればよいですか?](https://rvso.com/image/1520725/Windows%20CMD%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A8%E3%81%9D%E3%81%AE%E3%82%B5%E3%83%96%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%86%85%E3%81%AE%E8%A4%87%E6%95%B0%E3%81%AE%20HTML%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%86%85%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%8A%E3%82%88%E3%81%B3%E7%BD%AE%E6%8F%9B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
この要件は、Windows CMD を使用して複数のテキスト ファイル (ディレクトリ内) 内の文字列を検索して置換する方法 パート 2
フォルダーとそのサブフォルダー内のすべての HTML ファイルに対して検索と置換を実行したいと考えています。
ここでは、何らかの理由で、1 つはファイル パス、もう 1 つはそのファイル パス内のフォルダー名の 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.htmlB、フォルダ内の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ファイルが表示されますあ、B&Cただし、サブフォルダでは動作しません一般これはA、B、Cの各フォルダ内にあります。このスクリプトでフォルダ内のHTMLファイルのテキストを置き換えたいのですがあ、BそしてCテキストだけでなくサブフォルダ。 注: FART、REPLACER などの追加の BAT ファイルは必要ありません。 あなたの助けに感謝します。