我按以下要求在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条件,它会很好地工作,即:命令已正确执行。
先测试是否没有参数,然后分配并处理命令:
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)。