创建BAT文件以运行多个文件

时间:2016-02-08 11:35:27

标签: windows batch-file command-line

我需要创建一个BAT文件来运行多个文件。文件位于同一个文件夹中,但它们具有不同的名称并具有不同的参数。 有一些文件的例子:

.\MMDSv1.0.exe I_30_2_02_02_1.csv 7
.\MMDSv1.0.exe I_30_2_02_02_2.csv 7
.\MMDSv1.0.exe I_30_2_02_02_3.csv 7
.\MMDSv1.0.exe I_30_2_02_02_4.csv 7
.\MMDSv1.0.exe I_30_2_02_04_1.csv 7
.\MMDSv1.0.exe I_30_2_02_04_2.csv 7
.\MMDSv1.0.exe I_30_2_02_04_3.csv 7
.\MMDSv1.0.exe I_30_2_02_04_4.csv 7
.\MMDSv1.0.exe I_30_2_02_06_1.csv 7
.\MMDSv1.0.exe I_30_2_02_06_2.csv 7
.\MMDSv1.0.exe I_30_2_02_06_3.csv 7
.\MMDSv1.0.exe I_30_2_02_06_4.csv 7
.\MMDSv1.0.exe I_30_2_02_08_1.csv 7
.\MMDSv1.0.exe I_30_3_08_02_3.csv 10
.\MMDSv1.0.exe I_30_3_08_02_4.csv 10
.\MMDSv1.0.exe I_30_3_08_04_1.csv 10
.\MMDSv1.0.exe I_30_3_08_04_2.csv 10
.\MMDSv1.0.exe I_30_3_08_04_3.csv 10
.\MMDSv1.0.exe I_30_3_08_04_4.csv 10
.\MMDSv1.0.exe I_30_3_08_06_1.csv 10
.\MMDSv1.0.exe I_30_3_08_06_2.csv 10
.\MMDSv1.0.exe I_30_3_08_06_3.csv 10
.\MMDSv1.0.exe I_30_3_08_06_4.csv 10
.\MMDSv1.0.exe I_30_3_08_08_1.csv 10
.\MMDSv1.0.exe I_30_3_08_08_2.csv 10
.\MMDSv1.0.exe I_50_2_06_08_1.csv 12
.\MMDSv1.0.exe I_50_2_06_08_2.csv 12
.\MMDSv1.0.exe I_50_2_06_08_3.csv 12
.\MMDSv1.0.exe I_50_2_06_08_4.csv 12
.\MMDSv1.0.exe I_50_2_06_10_1.csv 12
.\MMDSv1.0.exe I_50_2_06_10_2.csv 12
有人可以帮帮我吗?谢谢大家

3 个答案:

答案 0 :(得分:4)

你已经显示了一个示例文件名列表,但你没有解释文件名必须如何处理,所以我得到了我的旧水晶球,清理它并问它:“这是什么问题是关于?“这就是答案:

“给出由下划线和数字列表分隔的几个部分组成的文件名列表,每次新文件名与前三个部分中的前一个文件名不同时,请选择不同的数字作为参数”

所以这就是解决方案:

编辑:在OP最终给我们正确的方法之后,这是正确的解决方案:

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1-3* delims=_" %%a in ('dir /B /A-D *.csv') do (
   set /A number=%%b*%%c*12/100
   MMDSv1.0.exe %%a_%%b_%%c_%%d !number!
)

答案 1 :(得分:1)

我不知道最后传递的数字背后的逻辑是什么,所以我也将它们放在迭代列表中:

@echo off
for %%# in (

    "I_30_2_02_02_1.csv 7"
    "I_30_2_02_02_2.csv 7"
    "I_30_2_02_02_3.csv 7"
    "I_30_2_02_02_4.csv 7"
    "I_30_2_02_04_1.csv 7"
    "I_30_2_02_04_2.csv 7"
    "I_30_2_02_04_3.csv 7"
    "I_30_2_02_04_4.csv 7"
    "I_30_2_02_06_1.csv 7"
    "I_30_2_02_06_2.csv 7"
    "I_30_2_02_06_3.csv 7"
    "I_30_2_02_06_4.csv 7"
    "I_30_2_02_08_1.csv 7"
    "I_30_3_08_02_3.csv 10"
    "I_30_3_08_02_4.csv 10"
    "I_30_3_08_04_1.csv 10"
    "I_30_3_08_04_2.csv 10"
    "I_30_3_08_04_3.csv 10"
    "I_30_3_08_04_4.csv 10"
    "I_30_3_08_06_1.csv 10"
    "I_30_3_08_06_2.csv 10"
    "I_30_3_08_06_3.csv 10"
    "I_30_3_08_06_4.csv 10"
    "I_30_3_08_08_1.csv 10"
    "I_30_3_08_08_2.csv 10"
    "I_50_2_06_08_1.csv 12"
    "I_50_2_06_08_2.csv 12"
    "I_50_2_06_08_3.csv 12"
    "I_50_2_06_08_4.csv 12"
    "I_50_2_06_10_1.csv 12"
    "I_50_2_06_10_2.csv 12"
) do (

    .\MMDSv1.0.exe %%~#

)

答案 2 :(得分:0)

由于参数没有可预测的模式,因此从公式生成此模式看起来不可靠。

您可以使用所有可能的参数集构建一个文本文件,然后循环遍历它。为简单起见,请确保文本文件和批处理文件位于路径或文件名中没有空格的文件夹中,否则此命令将失败。

与批处理文件相同的文件夹中名为“Commands.txt”的文本文件:

I_30_2_02_02_1.csv 7
I_30_2_02_02_2.csv 7
I_30_2_02_02_3.csv 7
I_30_2_02_02_4.csv 7
I_30_2_02_04_1.csv 7
I_30_2_02_04_2.csv 7
I_30_2_02_04_3.csv 7
I_30_2_02_04_4.csv 7
I_30_2_02_06_1.csv 7
I_30_2_02_06_2.csv 7
I_30_2_02_06_3.csv 7
I_30_2_02_06_4.csv 7
I_30_2_02_08_1.csv 7
I_30_3_08_02_3.csv 10
I_30_3_08_02_4.csv 10
I_30_3_08_04_1.csv 10
I_30_3_08_04_2.csv 10
I_30_3_08_04_3.csv 10
I_30_3_08_04_4.csv 10
I_30_3_08_06_1.csv 10
I_30_3_08_06_2.csv 10
I_30_3_08_06_3.csv 10
I_30_3_08_06_4.csv 10
I_30_3_08_08_1.csv 10
I_30_3_08_08_2.csv 10
I_50_2_06_08_1.csv 12
I_50_2_06_08_2.csv 12
I_50_2_06_08_3.csv 12
I_50_2_06_08_4.csv 12
I_50_2_06_10_1.csv 12
I_50_2_06_10_2.csv 12

然后在批处理文件中输入以下内容:

FOR /F %%F IN (%~dp0Commands.txt) DO (
    %~dp0MMDSv1.0.exe %%~F
)

如果路径或文件中有空格,请使用此备用命令:

FOR /F "usebackq tokens=* " %%F IN (`echo "%~dp0Commands.txt"') DO (
    %~dp0MMDSv1.0.exe %%~F
)

单引号字符是与#相同键的后引号,双引号是批处理文件中使用的标准引号字符,可能会被某些浏览器更改。