2012-03-15 8 views
4

私が質問したように、私のdosバッチファイルのコマンドとして入力引数を実行しています: Run an input parameter as command in dos batch script。 それは動作しますが、私が抱えている問題:入力コマンドが空であるかどうかを確認してください。 私は何を:dosバッチファイルの入力コマンドを確認していますか?

SETLOCAL 
set CMD=%* 
echo Running command [%CMD%] 
IF "%CMD%"=="" (
echo "Input argument missing: command" 
GOTO :end 
) 
echo "XXX %CMD%" 

し、実行:

script.bat echo "a b c" 

ウィル出力:

Running command [echo "a b c"] 
b was unexpected at this time. 

これは、IF条件で発生しますが、なぜですか?

入力が空であるかどうかを確認する方法を教えてください。 DOSで文字列が空であるかどうかを確認する方法を知っていますが、何らかの理由でこの組み合わせでは機能しません:(
BTW:IF条件を削除すると正常に実行されます。最初のパラメータが存在しないこと

  • エド

答えて

3

テストは、その後、割り当て、コマンド処理:「なぜ?」については

IF .%1 == . (
echo "Input argument missing: command" 
GOTO :eof 
) 

SETLOCAL  
set CMD=%* 
echo Running command [%CMD%] 
echo "XXX %CMD%" 

を、それが中に引用符ためですの値(aより前のもの)は、%CMD%の前に引用符を閉じます。したがって、文字列は"echo "a b c""と表示され、bがコマンドプロセッサを失敗させる原因になります。 (それは、==またはEQUのような比較トークンを期待していますが、奇妙なものではありませんb)。

+3

+1、いつも正しいです。しかし、私は ''%〜1 "==" "'それがほとんど安全だとすると好きです。 – jeb

+0

ありがとう、私は難しいと思っていた:( – edbras

+0

@jeb:ありがとう、 "%1" == "" 'しかし、何らかの理由で最初のパラメータが単純に '' ''(2番目のパラメータは空ではない値)であれば誤解を招く可能性があります。 ''% '==。' 'のテストには行こうと思っていました。 –

関連する問題