Как использовать параметр% 10 в пакетном файле, когда все 10 параметров должны быть выполнены одновременно? - PullRequest
0 голосов
/ 10 августа 2011

Я создал командный файл для одновременного выполнения 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"

Есть предложения ??

Спасибо Приянка

Ответы [ 3 ]

1 голос
/ 11 августа 2011

Следует отметить, что символ конвейера в 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
1 голос
/ 10 августа 2011

Вы можете попробовать сделать это в цикле 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, потому что все строки вПарены интерпретируются одновременно для всех итераций, но вы можете свернуть свой собственный цикл:

@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.

0 голосов
/ 10 августа 2011

Вы можете запустить несколько экземпляров одновременно также с 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%"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...