我在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条件它运行良好,即:命令正确执行。
答案 0 :(得分:3)
首先测试缺少参数,然后分配并处理命令:
IF .%1 == . (
echo "Input argument missing: command"
GOTO :eof
)
SETLOCAL
set CMD=%*
echo Running command [%CMD%]
echo "XXX %CMD%"
关于“为什么?”,这是因为CMD
(a
之前的那个)中的引号会关闭%CMD%
之前的引号,因此字符串显示为"echo "a b c""
,因此b
与字符串分离,导致命令处理器失败。 (它需要一个比较令牌,如==
或EQU
,但不是一些奇怪的b
。)