0

現在のディレクトリ内のすべての画像への画像リンクを含む .html ファイルを生成する単純な .bat ファイルを作成しようとしています。

使用法: C:> ギャラリー

出力: gallery.html

ファイルの内容:

<HTML><HEAD></HEAD><BODY>
<IMG SRC="C:/path/path/path/image1.gif">
<IMG SRC="C:/path/path/path/randomepic.gif">
<IMG SRC="C:/path/path/path/asdfsadfasd.gif">
</BODY></HTML>

画像ファイルの名前は予測できませんが、常に .gif であることに注意してください。

私が持っているもの:(gallery.bat内)

 @echo off
    set file_start=<HTML><HEAD></HEAD><BODY>
    set image_start=<IMG SRC="
    set image_dir=`cd`
    set image_end=">
    set file_end=</BODY></HTML>
    set file_name=gallery.html

    echo %file_start% > %file_name%
    for %%image in (*.gif) do @echo %image_start%%image_dir%%%image%image_end% >> $file_name%
    echo %file_end% >> %file_name%

しかし、うまくいきません。バッチ ファイルが入力リダイレクトと見なすため、小なり記号を表示できません。行を < 記号で引用すると、引用符が echo ステートメントに表示されます。

また、変数 %image_dir% に保存するための cd コマンド出力を取得できません

最後に、for ループの echo ステートメントが正しく出力されません。ただし、これは以前の問題の症状かもしれません。

私が抱えている小さな構文の問題だけであることを願っています。これを修正する方法を知っている人はいますか?御時間ありがとうございます!

パトリック・Q

4

1 に答える 1

5

FOR 変数は 1 文字でなければなりません。のようなものは使用できません%%image

と2 回以上の問題が<あります。>変数を定義するときに1回、展開された変数をエコーするときにもう一度。これらの文字は、引用符または でエスケープする必要があります^

変数に引用符を含めずに、代入中に引用符を使用できます -
set "var=value"。の割り当てimage_endは、引用符が埋め込まれているため、少し注意が必要です。

元の割り当てで問題のある文字をエスケープすることで、ECHO の問題を回避できます。

CD現在のディレクトリを取得するために使用することはできません。適切な構文は%CD%. image_dirしかし、変数は必要ありません。修飾子を使用して~f、ファイル名のフル パスを取得できます。help forFOR 変数修飾子の詳細については、コマンド プロンプトから入力してください。

出力を生成するすべてのコマンドを括弧で囲み、出力ファイルに一度だけリダイレクトする方が効率的です。

@echo off
setlocal
set "file_start=^<HTML^>^<HEAD^>^</HEAD^>^<BODY^>"
set "image_start=^<IMG SRC=""
set ^"image_end="^>"
set "file_end=^</BODY^>^</HTML^>"
set "file_name=gallery.html"

>"%file_name%" (
  echo %file_start%
  for %%I in (*.gif) do echo %image_start%%%~fI%image_end%
  echo %file_end%
)

引用符で囲まれていない文字を ECHO する際の問題を回避する別の方法は、遅延展開を使用することです。ただし!、ファイル名では有効であり、展開が遅れると、FOR 変数に文字が含まれていると展開が破損します!。そのため、遅延展開はループ内でオンとオフを切り替える必要があります。

@echo off
setlocal enableDelayedExpansion
set "file_start=<HTML><HEAD></HEAD><BODY>"
set "image_start=<IMG SRC=""
set ^"image_end=">"
set "file_end=</BODY></HTML>"
set "file_name=gallery.html"

>"%file_name%" (
  echo !file_start!
  setlocal disableDelayedExpansion
  for %%I in (*.gif) do (
    set "image=%%~fI"
    setlocal enableDelayedExpansion
    echo !image_start!!image!!image_end!
    endlocal
  )
  endlocal
  echo !file_end!
)
于 2012-10-27T13:56:37.373 に答える