質問: コマンドプロンプトでわからないことがあります 例えばtxtファイルをドロップするとある動作をするバッチファイルaがあります。 特定のアドレスにあるtxtをドロップせずにaの操作を実行出来るバッチファイルbを、 aのバッチを呼び出す形で作りたいです。 パッチファイルbを下のような感じで書いてみました。 ---------------------------------------- set bat=aのbatファイルのパス set txt=c:\*.txt call %bat% %txt% ---------------------------------------- これでc直下にある全てtxtはaのバッチファイルである動作をするだろうと思ったのですが、 aバッチファイルには『c:\*.txt』とそのまま読み込まれてしまいました。 *がワイルドカードとして使われていない感じです。 なぜでしょう?どうしたらいいでしょうか。
回答: >なぜでしょう?どうしたらいいでしょうか。 変数%txt%に格納されているのは「c:\*.txtのファイルリスト」ではなく、単なる「c:\*.txt」と言う文字列だからです。 ご質問の要望であれば、こうします。 rem ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ a.bat ここから @echo off rem 引数1のファイルパスに対して何か処理をする echo a.batの処理:%~1 type %~1 rem ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ a.bat ここまで rem ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ b.bat ここから @echo off set bat=c:\qa6671925\a.bat set txt=c:\qa6671925\*.txt rem 変数txtのファイルリスト分繰り返す for /f "usebackq tokens=*" %%i in (`dir /s /b "%txt%"`) do @%bat% %%i rem ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ b.bat ここまで これはご質問のとおり、2つのバッチを使う例です。 (a.batに手を入れたくない場合とかですね) 解法は他にもいくつか考えられます。 (バッチ1つでやる、とかね)