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

edb*_*ras 5 dos batch-file

我按以下要求在dos批处理文件中将输入参数作为命令运行在dos批处理脚本中将输入参数作为命令运行。那行得通,但是我遇到的问题是:检查输入命令是否为空。我所做的:

SETLOCAL
set CMD=%*
echo Running command [%CMD%]
IF "%CMD%"=="" (
 echo "Input argument missing: command"
 GOTO :end
)
echo "XXX %CMD%"
Run Code Online (Sandbox Code Playgroud)

并运行:

script.bat echo "a b c"
Run Code Online (Sandbox Code Playgroud)

将输出:

Running command [echo "a b c"]
b was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

这是在IF条件下发生的,但是为什么呢?

如何检查我的输入是否为空。我知道如何检查dos中的字符串是否为空,但是由于某种原因,它在这种组合中不起作用:(
顺便说一句:如果删除IF条件,它会很好地工作,即:命令已正确执行。

  • 埃德

And*_*y M 3

先测试是否没有参数,然后分配并处理命令:

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

SETLOCAL    
set CMD=%*
echo Running command [%CMD%]
echo "XXX %CMD%"
Run Code Online (Sandbox Code Playgroud)

至于“为什么?”,是因为CMD(之前的a)值中的引号封闭了之前的引号%CMD%,因此字符串显示为"echo "a b c"",从而b与字符串分离,导致命令处理器失败。(它需要一个比较标记,例如==or EQU,但不是一些奇怪的b)。

  • +1,因为你总是正确的。但我更喜欢 `if "%~1"==""` 因为它更安全 (3认同)