我创建了一个批处理文件,一次执行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
答案 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
)
编辑: shift
在for
循环中不起作用,因为对于所有迭代,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%"