Windows 7剩余的批处理文件参数

Jas*_*n S 1 windows for-loop cmd batch-file

在Windows批处理文件中,我知道%1被第一个参数%2替换,被第二个参数%*替换,并被所有参数替换.

有没有办法在第一个之后获得所有参数?(例如参数2-N)第二个之后的所有论点怎么样?

SHIFT命令似乎没有影响%*.

Mag*_*goo 5

@ECHO OFF
SETLOCAL
CALL :allafter 3 %*
ECHO args=%args%
GOTO :eof

:allafter
FOR /l %%a IN (1,1,%1) DO SHIFT
(SET args=)
:argloop
shift
IF NOT .%1==. SET args=%args% %1&GOTO argloop
IF DEFINED args SET args=%args:~1%
GOTO :eof
Run Code Online (Sandbox Code Playgroud)

在第三个参数之后获得所有内容 ARGS


编辑 - 处理可能包含逗号的空格分隔元素

@ECHO OFF
SETLOCAL
CALL :allafter 3 %*
ECHO args=%args%
CALL :allafter2 3 %*
ECHO args=%args%
GOTO :eof

:allafter
FOR /l %%a IN (1,1,%1) DO SHIFT
(SET args=)
:argloop
shift
IF NOT .%1==. SET args=%args% %~1&GOTO argloop
IF DEFINED args SET args=%args:~1%
GOTO :EOF

:allafter2
SET /a count=%1
SET args=%*
:arg2loop
SET oldargs=%args%
call SET args=%%args:*%1 =%%
IF "%args%"=="%oldargs%" (call SET args=%%args:*%1,=%%) ELSE (SET /a count-=1)
shift
IF %count% gtr -1 GOTO arg2loop
GOTO :EOF
Run Code Online (Sandbox Code Playgroud)

嗯 - 说得太快了.这个修改过的例程应该更好.one,two,three当调用remove-leading-n时,前一版本将要定义为一个参数的内容视为三个单独的参数.