有没有办法指出批处理文件中的最后n个参数?

在下面的例子中,我想从父批处理文件中调用一个子批处理文件,并将所有剩下的参数传递给子对象。

C:> parent.cmd child1 foo bar
C:> parent.cmd child2 baz zoop
C:> parent.cmd child3 a b c d e f g h i j k l m n o p q r s t u v w x y z

在parent.cmd中,我需要从参数列表中去除%1,并且只将其余参数传递给子脚本。

set CMD=%1
%CMD% <WHAT DO I PUT HERE>

我调查了使用SHIFT与%*,但那不起作用。 虽然SHIFT会将位置参数向下移动1,但%*仍然是指原始参数。

有人有主意吗? 我应该放弃并安装Linux吗?


不幸的是, %*总是会扩展到所有原始参数。 但是您可以使用以下代码片段来构建一个包含除第一个参数以外的所有变量:

rem throw the first parameter away
shift
set params=%1
:loop
shift
if [%1]==[] goto afterloop
set params=%params% %1
goto loop
:afterloop

我认为它可以做得更短,但是...我不会经常写这些东西:)

应该工作,但。


以下是使用“for”命令的单行方法...

for /f "usebackq tokens=1*" %%i in (`echo %*`) DO @ set params=%%j

该命令将第一个参数赋值给“i”,其余的(用'*'表示)赋值给“j”,然后用于设置“params”变量。


该线

%CMD% <WHAT DO I PUT HERE>

应改为:

(
SETLOCAL ENABLEDELAYEDEXPANSION
SET Skip=1

FOR %%I IN (%*) DO IF !Skip! LEQ 0 ( 
        SET params=!params! %%I
    ) ELSE SET /A Skip-=1
)
(
ENDLOCAL
SET params=%params%
)
%CMD% %params%

当然,您可以设置跳转到任意数量的参数。

链接地址: http://www.djcxy.com/p/30277.html

上一篇: Is there a way to indicate the last n parameters in a batch file?

下一篇: how to get batch file parameters from Nth position on?