【问题标题】:Run executable with parameters in range using CMD使用 CMD 运行参数范围内的可执行文件
【发布时间】:2015-12-09 13:20:38
【问题描述】:

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

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

【问题讨论】:

    标签: batch-file for-loop cmd


    【解决方案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

    【讨论】:

    • 谢谢,但这每次都会使用不同的变量运行程序。我想将 0 到 %%G/2 之间的所有数字发送给它。所以你提出的将打印出来(对于 %%G=10):way 10 0、way 10 1 等等。虽然我希望它打印:方式 10 0 1 2 3 4
    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 2020-11-23
    • 2014-09-30
    • 2021-12-21
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多