Есть ли причина, по которой я не могу увидеть последнее заявление ECHO? - PullRequest
1 голос
/ 03 октября 2019

Пожалуйста, смотрите прикрепленный код. Почему-то я не могу понять, почему не появляются последние 2 оператора. Я хотел бы получить некоторые рекомендации по этому конкретному вопросу.

@ECHO off
SET user=%1%
SET password=%2%
SET server=%3%
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
    ) ELSE (
        EXIT /B 1
    )
)
ECHO The PID is %PID%
ECHO We have reached the end

Так же, как и к вашему сведению, ожидаемый результат для команды внутри FOR:

Running maintenance_tools.gsp
Connecting as [user] to URL [server]
Running process 'DataWarehouseSync'
Process 'DataWarehouseSync' is being run with PID 16727
done

1 Ответ

1 голос
/ 03 октября 2019
....
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% как вы выразились.

...