我想确保在调用我的批处理时,传递的参数不超过2个。
是否有一种简单的方法可以检查,或者我必须根据需要多次调用SHIFT,直到参数值为空?
答案 0 :(得分:24)
您可以简单地测试是否存在第三个参数,如果存在则取消:
if not "%~3"=="" (
echo No more than two arguments, please
goto :eof
)
但更具体地说,没有直接的方法可以将传递给批处理的参数数量减去shift
并计算它们。因此,如果您想确保传递的参数不超过19个,那么您需要做到这一点。但是,如果预期参数的数量低于9,则方法效果很好。
答案 1 :(得分:5)
IF NOT "%3"=="" GOTO Too_Many_Args
答案 2 :(得分:1)
这是我收集和解析参数列表并传递给外部命令的小例子:
@echo off
setlocal enabledelayedexpansion
if %1. EQU . (
echo %~0 [-t NUM] FILE [FILE...]
goto end
)
:args_loop
if "%~1" EQU "-t" (
set arg_t=%1
set arg_t_val=%2
shift
) else (
set files=!files! %1
)
shift
if %1. NEQ . goto args_loop
:args_loop_end
x:\path\to\external.exe %arg_t% %arg_t_val% %files%
:end