アップデート
検索語を目的のコードに置き換える新しいスクリプトを行に追加しました。スクリプトは特殊文字を処理できます。
制限事項
- 先頭の閉じ括弧
]
の文字は、行の先頭からトリミングされます。この文字で始まるHTMLの行はないはずなので、問題はありません。(これは必要に応じて修正できます)
- パーセント記号
%
文字は、検索語または置換語のいずれにも使用できません。
ノート
- 行に奇数の二重引用符を含めることはできないため、偶数を確保する
"
ために二重引用符を2倍にします。""
つまり、いずれかの文字列に引用符がある場合は、それらも2倍にする必要があります。
スクリプトを使用するには、検索語と置換語を次のコード行で必要なものに置き換えるだけです。
set "_=%_:
検索語=
置換語%"
新しいScript.bat
@echo off
setlocal EnableExtensions DisableDelayedExpansion
:: Limitations
:: 1. Any leading close bracket ] characters will be trimmed due to delims=].
for /r %%F in (html.txt) do if exist "%%~fF" (
for /f "tokens=1,* delims=]" %%K in ('type "%%~fF" ^| find /n /v ""') do (
set "_=%%L"
call :Expand_
)
)
goto End
:Expand_
:: NULL is a blank line or line with only a close bracket ].
if not defined _ echo. & goto :eof
:: Ensure even number of double quotation marks.
set "_=%_:"=""%"
:: Inject the code.
set "_=%_:</body>=<code>To Inject</code></body>%"
:: Escape batch special characters.
set "_=%_:^=^^%"
set "_=%_:<=^<%"
set "_=%_:>=^>%"
set "_=%_:&=^&%"
set "_=%_:|=^|%"
:: Revert quotations.
set "_=%_:""="%"
:: Display
echo(%_%
goto :eof
:End
endlocal
pause >nul
オリジナル
これはあなたが望むことをするはずです。遅延拡張は必要ありません。すべての特殊文字をサポートする必要があります。
制限事項
- 先頭の閉じ括弧
]
の文字はトリミングされます。HTMLには角かっこで始まる行がないため、問題ありません。 (これは必要に応じて修正できます。)
- パーセント記号
%
文字は、検索語または置換語のいずれにも使用できません。
ノート
- 行に奇数の二重引用符を含めることはできないため、偶数を確保する
"
ために二重引用符を2倍にします。""
つまり、文字列に一致する引用符がある場合は、それらも2倍にする必要があります。(シナリオには適用されません)
- この線の周りに遅延拡張を使用することはできません。使用しないと
for /f %%S in ('echo "%xLine%"^| find /i "</body>"') do (
、!
感嘆符が問題になります。
Script.bat
@echo off
setlocal EnableExtensions
for /r %%F in (*.mht) do if exist "%%~fF" (
rem Limitation - Any leading close bracket ] characters will be trimmed.
for /f "tokens=1,* delims=]" %%K in ('type "%%~fF" ^| find /n /v ""') do (
set "xLine="%%L""
call :Match
echo(%%L>>"%%~dpF\new_%%~nF%%~xF"
)
rem del "%%~fF"
rem ren "%%~dpF\new_%%~nF%%~xF" "%%~nxF"
)
goto End
:Match
setlocal EnableExtensions DisableDelayedExpansion
rem Double the double quotations to ensure even number of double quotations.
set "xLine=%xLine:"=""%"
for /f %%S in ('echo "%xLine%"^| find /i "</body>"') do (
rem Add your code to inject here. Copy the template echo below.
rem Note that special characters need to be escaped.
echo Inject Code>>"%%~dpF\new_%%~nF%%~xF"
)
endlocal
goto :eof
:End
endlocal
pause >nul
これにより、新しいファイルがに出力されnew_<filename>.mht
ます。古いファイルを新しいファイルに置き換える場合は、 andコマンドrem
の前からコマンドを削除するだけです。del
ren