我知道我可以使用 %0 获取第一个参数,使用 %1 获取第二个参数,依此类推。我还可以使用 %* 获取所有参数。
我可以从第二个参数中获取所有参数吗?例如,如果我运行
foo.bat bar1 bar2 bar3 bar4
我怎样才能得到唯一的bar2 bar3 bar4
?
我知道我可以使用 %0 获取第一个参数,使用 %1 获取第二个参数,依此类推。我还可以使用 %* 获取所有参数。
我可以从第二个参数中获取所有参数吗?例如,如果我运行
foo.bat bar1 bar2 bar3 bar4
我怎样才能得到唯一的bar2 bar3 bar4
?
@ECHO OFF
SETLOCAL
SET allargs=%*
IF NOT DEFINED allargs echo no args provided&GOTO :EOF
SET arg1=%1
CALL SET someargs=%%allargs:*%1=%%
ECHO allargs %allargs%
ECHO arg1 %arg1%
ECHO someargs %someargs%
这将留下SOMEARGS
至少一个前导分隔符(如果已设置)
用SHIFT
命令。但是随着每一个转变,你都会失去第一个。这不会改变%*
但你将能够得到所有的论点,但第一个:
@echo off
shift
set "arg_line= "
:parse_args
if "%~1" NEQ "" (
arg_line=%argline% "%~1"
goto :parse_args
)
现在您将拥有所有参数,但第一个存储在%arg_line%
你需要使用SHIFT
. 它移动参数的表观位置,然后%*
将从移动到的位置获取所有参数。您应该在使用之前获取第一个参数SHIFT
。
更多SHIFT
信息。