Просто возникли проблемы с партией, и вам нужно уточнить «IF», «ELSE» и «GOTO».

@echo off

sc \\RemoteServer stop "My_Service"

:query
sc \\RemoteServer query "My_Service"

if %state% == 1 goto start # state =1 indicates service is stopped
else goto query

:start
sc \\RemoteServer start "My_Service"

Итак, я хочу, чтобы служба была остановлена, пакет для запроса состояния службы и, в зависимости от состояния, переходил к следующему шагу. Это необходимо, так как сервис останавливается достаточно белым. Если служба застряла в 3 STOP_PENDING то sc start не удастся.

Может кто-нибудь объяснить, почему мой GOTO терпит неудачу, или, возможно, предложить лучшую методологию?

TNA

1 ответ1

0

Использование оператора if в пакете обычно имеет следующий формат:

if %state%==1 (
   goto start
) ELSE (
   goto query
)

Нет никакой причины, по которой интерпретатор cmd связывает ELSE с IF другим.

Кроме того, комментарии в пакетном режиме в отдельной строке, с REM или специально интерпретированной :: (какая-то метка нулевой строки или что-то, если я правильно помню).

REM this is a valid comment
:: this too, but be careful using these inside blocks of any kind... so stick to REM

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .