....
SET server=%3
SET "PID="
ECHO Running MaintenanceToolsAPI.StartProcess
FOR /F "tokens=1-8" %%a IN ('maintenance_tools -user %user% -password %password% -server %server% -startprocess DataWarehouseSync') DO (
IF "%%a %%b %%c %%d %%e %%f %%g"=="Process 'DataWarehouseSync' is being run with PID" (
SET PID=%%h
)
)
IF NOT DEFINED PID EXIT /B 1
ECHO The PID is %PID%
...
Дано (ваш код):
Когда строка Running maintenance_tools.gsp
обработана,
%% a станет Running
%% b станет maintenance_tools.gsp
%% c .. %% g будет пустым, поэтому
"%%a %%b %%c %%d %%e %%f %%g"=="Process 'DataWarehouseSync' is being run with PID"
будет false
, поэтому путь else
выбран и процесс завершен.
Solution - заставить PID
очистить, тогда, если какая-либо строка соответствует требуемой строке, PID
станет чем-то и, следовательно, когда for
закончится, будет определено PID
. Exit b 1
в противном случае сообщите и продолжите.
Также обратите внимание, что ссылки на параметры (% 0 ..% 9) должны использоваться как (например) set var=%3
или предпочтительно set "var=%3"
, а не %3%
как вы выразились.