Reputation: 4404
I am running input arguments as a command in my dos batch file as I asked in: Run an input parameter as command in dos batch script. That works, however the problem I am having: checking if the input command if it's empty. What I do:
SETLOCAL
set CMD=%*
echo Running command [%CMD%]
IF "%CMD%"=="" (
echo "Input argument missing: command"
GOTO :end
)
echo "XXX %CMD%"
And running:
script.bat echo "a b c"
Will output:
Running command [echo "a b c"]
b was unexpected at this time.
This occurs in the IF condition, but why?
How can I check if my input is empty. I know how to check if a string is empty in dos, but for some reason it doesn't work in this combination :(
BTW: If I remove the IF condition it works well, that is: the command is executed correctly.
Upvotes: 5
Views: 10193
Reputation: 77667
Test for the absence of parameters first, then assign and process the command:
IF .%1 == . (
echo "Input argument missing: command"
GOTO :eof
)
SETLOCAL
set CMD=%*
echo Running command [%CMD%]
echo "XXX %CMD%"
As to the "Why?", it's because the quotation mark in the value of CMD
(the one before a
) closes the quotation mark before %CMD%
, and so the string appears as "echo "a b c""
, and thus b
becomes separated from the string, which causes the command processor to fail. (It expects a comparison token, like ==
or EQU
, but not some strange b
).
Upvotes: 3