トップ回答者
コマンドプロンプトでBATファイルを非同期実行する場合の引数の渡し方について

質問
-
いつも参考にさせていただいております。
Windows7でBATファイルの中から別のBATファイルを非同期で呼び出すときに、Startコマンドを使っていますが、 この呼び出される側のBATファイルに引数を与えたいと考えています。引数は親BATで作られる値なので、変数になります。
2個のBATファイルは同じフォルダにあります。Start %0\..\child.bat %arg1% %arg2% %arg3%
親BATを上記のようにして実行すると、以下のエラーになります。
The system cannot find the file [ %arg1%の内容].
これは、%arg1% が引数ではなく実行ファイルとして認識された結果に見えます。
Startの使い方が悪いのかと思いますが、どなたかご存知の方がいらっしゃいましたら教えてください。
宜しくお願い致します。
回答
すべての返信
-
ご返信ありがとうございます。
%0は展開すると自動的に””で括られるので、スペースの問題は無いと考えていました。
ところがこの仕様が罠だったようで、Start の後の最初のパラメータにダブルクォーテーションがある場合、それは実行プログラムではなく、ウインドウタイトルとして認識していました。そのため引数の認識がずれてarg1が実行ファイル扱いになっていました。
そこで、記述を改めて、
start "" %0\..\child.bat ”%arg1%" "%arg2%" "%arg3%"
のようにしたところ、arg1を実行しようとする挙動は無くなりました。
しかし、child.bat は正しく実行されず、 %arg1% の一部を含む 文字列を実行しようとしています。
具体的には %arg1%には日付が入り、これはスペースを含んでいます。
実行結果のエラーは、'C:\temp\master.bat"\..\child.bat "Tue' is not recognized as an internal or ext
ernal command,operable program or batch file.このようになり、ダブルクオーテーションの括りがおかしなことになっています。
うまくchild.batを呼び出せるといいのですが。しばらく試行錯誤してみます。
もしお分かりのことがありましたら、助言いただけますと幸いです。
- 編集済み 社員番号042 2016年7月26日 6:16 間違いを訂正