检查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%"
至于“为什么?”,这是因为在引号值为CMD
(a
之前的那个)在%CMD%
之前关闭引号,因此字符串显示为"echo "a b c""
,因此b
与字符串分离,导致命令处理器失败。 (它期望比较令牌,如==
或EQU
,但不是一些奇怪的b
)。
+1,因为你总是正确的。但我优先考虑如果“%〜1”==“”'因为它更安全 – jeb 2012-03-15 20:37:45
谢谢,我在想困难:( – edbras 2012-03-15 20:42:46
@jeb:谢谢,我也想过''%〜1“==”“' ,但是如果由于某种原因第一个参数只是''“'(而第二个参数是一个非空值),那么它可能会引起误解。我的意思是,我们不能确定是否可以指定''” “''或者不是,所以我想我会用'。%1 ==。'test。 – 2012-03-15 20:48:09