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

问题描述:

我正在将运行输入参数作为命令在我的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中是空的,但由于某种原因,它不能在这个组合中工作:(
顺便说一句:如果我删除了IF条件,它的效果很好,那就是:命令执行正确。

  • 埃德

试验没有参数的第一,然后分配和处理命令:

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)。

+3

+1,因为你总是正确的。但我优先考虑如果“%〜1”==“”'因为它更安全 – jeb 2012-03-15 20:37:45

+0

谢谢,我在想困难:( – edbras 2012-03-15 20:42:46

+0

@jeb:谢谢,我也想过''%〜1“==”“' ,但是如果由于某种原因第一个参数只是''“'(而第二个参数是一个非空值),那么它可能会引起误解。我的意思是,我们不能确定是否可以指定''” “''或者不是,所以我想我会用'。%1 ==。'test。 – 2012-03-15 20:48:09