@ECHO OFF
SETLOCAL enabledelayedexpansion
for /r U:\ %%i in (*.html) do (
echo found %%i
SET outfile="%%~dpni.lmth"
(
SETLOCAL disabledelayedexpansion
FOR /F "usebackq delims=" %%L IN ("%%i") DO (
SET "line=%%L"
SETLOCAL ENABLEDELAYEDEXPANSION
SET "line=!line:/live/=/test/!
echo !line!
ENDLOCAL
)
ENDLOCAL
)>!outfile!
)
pause
GOTO :EOF
この展開はどうですか?
注: に切り替えるのではなく、処理中の HTML ファイルに変更FOR/R
して使用します。私のRAMDRIVEです。合わせて変更する必要があります。ECHO
%%i
%%f
U:
outfile
HTMLファイル名に一致するファイル名を生成するように設定されていますが、拡張子が付いています(その場で更新.lmth
することはできません). ファイル名またはパス名の潜在的なスペースを処理するために引用されています。~dpn
i
d
p
n
%%i
次の論理ステートメントは(for /f...[lines] )>!outfile!
、任意のecho
ed テキストを NEW ファイルに送信するものです!outfile!
。enabledelayedexpansion
バッチの 2 番目の物理行では、外側のループ!outfile!
内で変更されるため、RUN-TIME 値が作成されます。FOR r
%%i の実際の HTML ファイル名にはスペースが含まれている可能性があるため、引用符で囲む必要がありますFOR/F
。この句は、ファイルの行全体が最初のトークンだけでなく適用されるdelims=
ことを保証します (実際には、行全体が最初のトークンになります)。"%%i"
%%L
このSET
コマンドは、変数の RUN-TIME 値に含まれる「/live/」を文字列「/test/」に置き換え、line
結果を に割り当てline
ます。結果の値はECHO
d になります - これはにリダイレクトされますoutfile
オリジナルでは を割り当てますが、x
バッチは解析フェーズの一部として %var% の変数の値を置き換えるため、行が解析されたときの状態を再現することに注意してください。その結果、行は単純になり(割り当てられていない可能性が高いため)、奇妙なことに状態が報告されます ( )set x=
echo %x%
x
ECHO
x
echo
Echo is OFF
ここにいくつかのガチャがあります。まず、%
その他の文字はバッチで処理するのが難しいことで知られているため、注意が必要です。次に、FOR/F
空行をバイパスします。これは、必要に応じて克服できます。/live/
第三に、これはいずれかの場合のANYオカレンスを置き換えます/test/
幸運を!
感嘆符をサポートするように編集: 20130711T0624Z
SETLOCAL enabledelayedexpansion
行とENDLOCAL
直前に)>!outfile!
合わせて追加