我正在开发一个命令行实用程序,它将一组输入参数作为命令。然后根据预定义的名称验证这些输入参数。该实用程序以这种方式调用:
runUtility.cmd -A -B x,y,z -C w
这里的参数是 A、B 和 C(以 - 开头的参数)。现在验证规则如下:
参数的名称应该与预定义的名称匹配,这样就不能传递任何无效的参数,比如 -UVW
参数可能有也可能没有值。在上面的例子中 -A 没有值,而 -B 有 x,y,z 而 -C 有 w。
我编写了这段代码来验证输入:
:validate
set argument=%1
set argumentValue=%2
if "%argument%" == "-A" (
shift
goto validate
)
if "%argument%" == "-B" (
if "%argumentValue%" == "" (
echo Empty value for -B
goto end
)
shift
shift
goto validate
)
if "%argument%" == "-C" (
if "%argumentValue%" == "" (
echo Empty value for -C
goto end
)
shift
shift
goto validate
)
if %argument%" == "" (
goto end
)
Argument %argument% is invalid
:end
但这似乎不起作用,因为 -B 有逗号分隔的值,所以对于 B 进行两次移位时,在下一次迭代中,y 变为 %1,z 变为 %2。由于 y 不是参数,因此它会因最后一行代码“参数 y 无效”而失败。实际上,SHIFT 命令将逗号作为分隔符,因此 x,y,z 确实保持为单个值。
我希望 x,y,z 被视为单个值,或者有没有其他方法来处理这个?我对批处理脚本有点陌生,我尝试使用 FOR 循环,但我无法在每次迭代中将 %1 和 %2 放在一起。