【发布时间】:2010-12-02 15:35:31
【问题描述】:
我想确保在调用我的批处理时,传递的参数不超过 2 个。
有没有简单的方法来检查,还是我必须根据需要多次调用 SHIFT 直到参数值为空?
【问题讨论】:
标签: batch-file
我想确保在调用我的批处理时,传递的参数不超过 2 个。
有没有简单的方法来检查,还是我必须根据需要多次调用 SHIFT 直到参数值为空?
【问题讨论】:
标签: batch-file
您可以简单地测试第三个参数是否存在,如果存在则取消:
if not "%~3"=="" (
echo No more than two arguments, please
goto :eof
)
但更具体地说,除了shifting 并计算它们之外,没有直接的方法可以获取传递给批处理的参数数量。因此,如果您想确保传递的参数不超过 19 个,那么您就需要这样做。但如果预期参数的数量低于 9,则上述方法效果很好。
【讨论】:
"%~3" 以避免参数周围出现引号问题
IF NOT "%3"=="" GOTO Too_Many_Args
【讨论】:
这是我收集和解析参数列表并传递给外部命令的小示例:
@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
【讨论】: