我需要多次执行相同的程序,但每次都有不同的参数。 所以我创建了一个循环并调用该程序的批处理文件。批处理看起来像这样:
FOR /L %%G IN (5,1,15) DO program.exe -t %%G
现在我有相同的程序,但我也想在每次调用时发送一些更多的参数,这些参数将是从0到%% G / 2的数字。
例如,对于%% G为10,我想使用参数运行程序:
program.exe -t 10 -s 0 1 2 3 4
这可以在Windows批处理中以某种方式完成吗?
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
:: first way - use a subroutine
FOR /L %%G IN (5,1,15) DO CALL :sub %%G
:: second way - use "delayedexpansion"
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%G IN (5,1,15) DO (
SET /a parm2=%%G / 2
FOR /L %%T IN (2,1,!parm2!) DO ECHO(second way %%G %%T
)
GOTO :EOF
:sub
SET /a parm2=%1 / 2
FOR /L %%T IN (2,1,%parm2%) DO ECHO(first way %1 %%T
GOTO :EOF
第一种方法使用一个子程序,它计算第一个参数 it 的第二个参数,%1
到子程序; %%G
到主程序
第二种方式使用延迟扩展,允许!var!
用于访问变量parm2
,因为它是通过循环操作改变的。在循环开始之前,%parm2%
将被parm2
的值替换。 (参见关于delayedexpansion
)
澄清后......
:: use "delayedexpansion"
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%G IN (5,1,15) DO (
SET "paramstr="
SET /a parm2=%%G / 2
FOR /L %%T IN (0,1,!parm2!) DO SET "paramstr=!paramstr! %%T"
ECHO(program.exe %%G !paramstr!
)
GOTO :EOF
使用延迟扩展
将所需范围累积到paramstr