当需要同时执行所有10个参数时,如何在批处理文件中使用%10参数?

时间:2011-08-10 10:34:10

标签: batch-file

我创建了一个批处理文件,一次执行10个命令,如下所示,但每次在命令提示符下运行它。它保留最后一个参数,即忽略第10个参数

  回声道      c:
     “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%1”
| “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%2”
| “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%3”
| “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%4”
| “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%5”
| “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%6”
  | “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%7”
  | “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%8”
  | “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%9”
  | SHIFT
  | “H [vzmwwdminta1sd] S [#] P [8080] .exe”“C:\ NDM_To_BatchDispatcher \ NDM \ INBOUND_FILES \%9”

有什么建议吗?

由于 Priyanka

3 个答案:

答案 0 :(得分:1)

您可以尝试在for循环中执行此操作:

for /l %%i in (1,1,10) do (
    "H[vzmwwdminta1sd]S[#]P[8080].exe" "C:\NDM_To_BatchDispatcher\NDM\INBOUND_FILES\%1"
    SHIFT
)

编辑: shiftfor循环中不起作用,因为对于所有迭代,parens中的所有行都会被同时解释,但是你可以滚动你自己的循环:

@echo off
set i=1
:loop
if %i% GEQ 11 goto :end
"H[vzmwwdminta1sd]S[#]P[8080].exe" "C:\NDM_To_BatchDispatcher\NDM\INBOUND_FILES\%1"
SHIFT
set /a i+=1
goto :loop

:end
@echo All done.

另一个解决方案是使用for循环,但调用子过程来执行shift

答案 1 :(得分:1)

您必须注意PROC1 | PROC2中的管道字符不是用于并行(同时)执行PROC1和PROC2,而是用于将PROC1的输出连接到PROC2的输入。如果这是你想要的,下面的方法允许你以这种方式执行任意数量的命令:

@echo off
"H[vzmwwdminta1sd]S[#]P[8080].exe" "C:\NDM_To_BatchDispatcher\NDM\INBOUND_FILES\%1" > output.txt
:loop
shift
if "%1" == "" goto end
ren output.txt input.txt
"H[vzmwwdminta1sd]S[#]P[8080].exe" "C:\NDM_To_BatchDispatcher\NDM\INBOUND_FILES\%1" < input.txt > output.txt
goto loop
:end
type output.txt
del output.txt

如果要并行执行所有命令,则必须按照上面的建议使用START:

@echo off
:loop
start "Command %1" "H[vzmwwdminta1sd]S[#]P[8080].exe" "C:\NDM_To_BatchDispatcher\NDM\INBOUND_FILES\%1" 
shift
if not "%1" == "" goto loop

答案 2 :(得分:0)

您也可以使用start.exe同时启动多个实例。

@echo off
set i=1
:loop
if %i% GEQ 11 goto :end
start "Titel%i%" "H[vzmwwdminta1sd]S[#]P[8080].exe" "C:\NDM_To_BatchDispatcher\NDM\INBOUND_FILES\%1"
SHIFT
set /a i+=1
goto :loop
:end

或者您首先将变量保存到p1,p2,...,p10

@echo off
set prog="H[vzmwwdminta1sd]S[#]P[8080].exe"
set "param=C:\NDM_To_BatchDispatcher\NDM\INBOUND_FILES\"
set i=1
:loop
if %i% GEQ 11 goto :end
set "p%i%=%1"
SHIFT
set /a i+=1
goto :loop
:end

%prog% "%param%p1%" ^
 | %prog% "%param%p2%" ^
 | %prog% "%param%p3%" ^
 | %prog% "%param%p4%" ^
 | %prog% "%param%p5%" ^
 | %prog% "%param%p6%" ^
 | %prog% "%param%p7%" ^
 | %prog% "%param%p8%" ^
 | %prog% "%param%p9%" ^
 | %prog% "%param%p10%"