edbras
edbras

Reputation: 4404

checking input command in dos batch file?

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

Answers (1)

Andriy M
Andriy M

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

Related Questions