のように、すべての* .TSファイルをenumarateするforループを使用することができますすることは遅れて、環境変数の抽出については、この逸品です。これは、環境変数の拡張を遅延させてワイルドカードと一致するファイル名のリストを単一の変数に組み込むために、比較的新しい表記法(NT 3.1以降はXPとWin 7で動作する)を使用する方法を示しています。遅延
環境変数の展開を使用すると、 実行時に環境変数を展開するさまざま 文字(感嘆符)を使用することができます。遅れ変数の展開が有効になっている場合は意図したとおりに動作するように、次のように、上記 例が記述できます。
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
注問題は、スペースを含む名前や他の「面白い」の文字を引用してここに存在していること私は学生のための練習として残しました。 CMD.EXEの引用符を取得することは、Unixシェルで正しく取得するよりもさらに困難です。
もちろん、echo
コマンドをコマンドラインに置き換えてください。
編集:これはバッチファイルではうまく機能しないと見られており、遅延拡張の特定の機能が有効になっているかどうかによって異なります。
遅延拡張機能は、/V:ON
のCMD.EXEへの切り替え、またはCMDのすべての呼び出しに対してレジストリキーによってグローバルに有効になります。詳細はCMD /?
の出力に記載されています。
バッチファイルに移動すると、いくつかの問題点があり、機能を有効にするための簡単な修正があります。重要な点は、SETLOCAL
コマンドに遅延機能をオン/オフするオプションがあることです。 CMD /?
から:バッチファイルで
SETLOCAL ENABLEDELAYEDEXPANSION
またはDISABLEDELAYEDEXPANSION
引数/V:ON
または/V:OFF
スイッチよりも優先されます。詳細はSETLOCAL /?
を参照してください。
また、FOR
コマンドのようないくつかのコンテキストでは、パーセント記号を倍にする必要があります。すべて一緒に、私はこのような私の例を書き換えたい:上記はまた、彼らにスペースを持っている名前に対処するための各ファイル名を引用し、残された文字列の先頭オフ余分なスペースをトリム
SETLOCAL ENABLEDELAYEDEXPANSION
set LIST=
for %%f in (*.ts) do set LIST=!LIST! "%%f"
echo %LIST:~1%
そこには最初のループ反復で%LIST:~1%
があります。
こんにちは、ありがとうございます。遅延環境変数拡張メソッドを試しました。それはコマンドラインで私のために働いた。だから私はバッチファイルにこれを入れてみてください。しかし、その時点で、環境変数展開が有効になると(cmd/V = ONを使用すると)、echoコマンドと上記の方法は動作しません。私はこの操作を実行することができない新しいコマンドラインを作成しているかもしれません。だから、バッチファイルにどのようにすることができますか? – Aneesh
@Aneesh、バッチファイルで動作するレシピが見つかりました。詳細については私の答えを編集してください。私は勝利7の下でここでそれをテストしました。 – RBerteig
こんにちはRBerteig、ありがとう。これは私のためにうまくいく。 :) .. – Aneesh