2011-01-05 9 views
1

Windows XPでバッチファイルを作成しています。私は*.tsファイルのセットを私のexeのディレクトリにコピーしました。 TSファイルの数は名前のように固定されていません。Windowsバッチファイルでexeに引数として渡す際の*。*の展開

今私は引数としてすべてのTS名を取る私のexeの1つを実行したいと思います。

は、Linuxでは、私はこれが働い <MyExeName> *.ts

のように試してみました。しかし、Windowsで同じことをすると、*.tsは展開されません。

*.tsを拡張する方法を教えてください。私のexeに引数を渡してください。

答えて

1

Windowsシェル(コマンドプロセッサ)は、外部コマンドを呼び出すときにグロビングを実行しません。あなたはそれを自分で行う必要があります。 Cの場合は、Globbing in C++/C, on Windowsを参照してください。

1

あなたはSET /?からの出力の終わり近く

for %%f in (*.ts) do echo %%f 
0

のように、すべての* .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%があります。

+0

こんにちは、ありがとうございます。遅延環境変数拡張メソッドを試しました。それはコマンドラインで私のために働いた。だから私はバッチファイルにこれを入れてみてください。しかし、その時点で、環境変数展開が有効になると(cmd/V = ONを使用すると)、echoコマンドと上記の方法は動作しません。私はこの操作を実行することができない新しいコマンドラインを作成しているかもしれません。だから、バッチファイルにどのようにすることができますか? – Aneesh

+0

@Aneesh、バッチファイルで動作するレシピが見つかりました。詳細については私の答えを編集してください。私は勝利7の下でここでそれをテストしました。 – RBerteig

+0

こんにちはRBerteig、ありがとう。これは私のためにうまくいく。 :) .. – Aneesh

関連する問題