Starten Sie den Dienst auf dem Remote-Systemstapel neu

0

Ich habe nur Probleme mit einer Charge und brauche eine Klarstellung zu "IF", "ELSE" und "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"

Ich möchte also, dass der Dienst angehalten wird, der Batch den Status des Dienstes abfragt und je nach Zustand mit dem nächsten Schritt fortfährt. Dies ist notwendig, da der Dienst ziemlich lange dauert, um zu stoppen. Wenn der Dienst steckt 3 STOP_PENDING dann ist die sc start wird versagen.

Kann jemand erklären, warum mein GOTO versagt, oder möglicherweise eine bessere Methodik anbieten?

TNA

btgream
quelle

Antworten:

0

Die Verwendung einer if -Anweisung im Stapel folgt normalerweise diesem Format:

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

Es gibt keinen Grund, warum der cmd-Interpreter die ELSE mit der IF-Antwort verknüpft.

Auch Kommentare in Batch in der eigenen Zeile, mit einem REM oder speziell ausgelegt :: (eine Art Nulllinienbeschriftung oder etwas, wenn ich mich richtig erinnere)

REM this is a valid comment
:: this too, but be careful using these inside blocks of any kind... so stick to REM
Wally
quelle
Achten Sie auch auf die schließende Klammer. Manchmal, wenn es wie in dem von Wally angegebenen Beispiel ist, wird der Befehl vor dem Befehl einen Fehler auslösen. Besser ist es, die schließende Klammer direkt nach der goto query so wie: goto query) Die Verwendung eines Editors wie Notepad ++ mit Syntaxhervorhebung hilft auch bei der Behandlung von Blöcken in Batch-Skripts. Und was auch immer Sie tun, verwenden Sie keinen Apostroph als Kommentarzeichen. Die einzigen gültigen Kommentare in Batch-Skripten sind REM und ::
JSanchez
Oh, ich habe das falsch verstanden. Fest.
Wally