使用CMD

时间:2015-12-09 13:20:39

标签: batch-file for-loop cmd

我需要多次执行相同的程序,但每次都有不同的参数。 所以我创建了一个循环并调用该程序的批处理文件。批处理看起来像这样:

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批处理中以某种方式完成吗?

1 个答案:

答案 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

的任意数量的SO项目

澄清后......

:: 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