0

イメージ タグを含む 10 個を超える html ファイルがあります。ビルドをテスト サイトにデプロイするたびに、img ソースを変更する必要があります。などのため<img src=/live/Content/xyz.png />
<img src=/test/Content/xyz.png />
しばらく調べて読んだ後、次のバッチスクリプトを思いつきましたが、ここからさらに先に進む方法がわかりません:

for /r %%i in (*.html) do echo %%i    
for %%f in (*.html) do ( 
FOR /F %%L IN (%%f) DO (
  SET "line=%%L"
  SETLOCAL ENABLEDELAYEDEXPANSION 
  SET "x=     <--------------------WHAT DO I SET HERE?
  echo %x%
  ENDLOCAL  )) pause    

これは私の最初のバッチ スクリプトです。誰かが私を正しい方向に導いてくれますか?

4

1 に答える 1

0
@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%%fU:

outfileHTMLファイル名に一致するファイル名を生成するように設定されていますが、拡張子が付いています(その場で更新.lmthすることはできません). ファイル名またはパス名の潜在的なスペースを処理するために引用されています。~dpnidpn%%i

次の論理ステートメントは(for /f...[lines] )>!outfile!、任意のechoed テキストを NEW ファイルに送信するものです!outfile!enabledelayedexpansionバッチの 2 番目の物理行では、外側のループ!outfile!内で変更されるため、RUN-TIME 値が作成されます。FOR r

%%i の実際の HTML ファイル名にはスペースが含まれている可能性があるため、引用符で囲む必要がありますFOR/F。この句は、ファイルの行全体が最初のトークンだけでなく適用されるdelims=ことを保証します (実際には、行全体が最初のトークンになります)。"%%i"%%L

このSETコマンドは、変数の RUN-TIME 値に含まれる「/live/」を文字列「/test/」に置き換え、line結果を に割り当てlineます。結果の値はECHOd になります - これはにリダイレクトされますoutfile

オリジナルでは を割り当てますが、xバッチは解析フェーズの一部として %var% の変数の値を置き換えるため、行が解析されたときの状態を再現することに注意してください。その結果、行は単純になり(割り当てられていない可能性が高いため)、奇妙なことに状態が報告されます ( )set x=echo %x%xECHOxechoEcho is OFF

ここにいくつかのガチャがあります。まず、%その他の文字はバッチで処理するのが難しいことで知られているため、注意が必要です。次に、FOR/F空行をバイパスします。これは、必要に応じて克服できます。/live/第三に、これはいずれかの場合のANYオカレンスを置き換えます/test/

幸運を!


感嘆符をサポートするように編集: 20130711T0624Z

SETLOCAL enabledelayedexpansion行とENDLOCAL直前に)>!outfile!合わせて追加

于 2013-07-11T03:30:37.537 に答える