检查dos批处理文件中的输入命令?

时间:2012-03-15 15:49:09

标签: batch-file dos

我在dos批处理文件中运行输入参数作为命令,正如我所问: Run an input parameter as command in dos batch script。 这是有效的,但我遇到了问题:检查输入命令是否为空。 我做了什么:

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中的字符串是否为空,但由于某种原因它在这种组合中不起作用:(
顺便说一句:如果我删除IF条件它运行良好,即:命令正确执行。

1 个答案:

答案 0 :(得分:3)

首先测试缺少参数,然后分配并处理命令:

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

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

关于“为什么?”,这是因为CMDa之前的那个)中的引号会关闭%CMD%之前的引号,因此字符串显示为"echo "a b c"",因此b与字符串分离,导致命令处理器失败。 (它需要一个比较令牌,如==EQU,但不是一些奇怪的b。)