Echo in for-Schleife syntaktisch nicht richtig
Hallo zusammen,
ich möchte prüfen ob bei einem Server bestimmte Dienste gestartet sind. Dazu benutze ich eine for-Schleife die alle Dienste in der Datei Dienste.txt abarbeitet.
So sieht der Code-Schnipsel momentan aus:
Problem ist:
a) ich bekomme den Fehler: *@echo ist an dieser Stele syntaktisch nicht verarbeitbar*
b) ich hätte gerne noch die else-Funktion drin, also wenn der Dienst läuft, soll
Kann mir hier kurz jemand aushelfen? Danke
Gruß
Larz
ich möchte prüfen ob bei einem Server bestimmte Dienste gestartet sind. Dazu benutze ich eine for-Schleife die alle Dienste in der Datei Dienste.txt abarbeitet.
So sieht der Code-Schnipsel momentan aus:
for /f %%i in (Dienste.txt) do (
for /f "tokens=4" %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do set Status=%%a
if not %STATUS%==RUNNING @echo Dienst %%i läuft nicht>>C:\TEMP\servercheck.log
)
Problem ist:
a) ich bekomme den Fehler: *@echo ist an dieser Stele syntaktisch nicht verarbeitbar*
b) ich hätte gerne noch die else-Funktion drin, also wenn der Dienst läuft, soll
@echo Dienst %%i OK>>C:\TEMP\servercheck.log
Kann mir hier kurz jemand aushelfen? Danke
Gruß
Larz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 145788
Url: https://administrator.de/forum/echo-in-for-schleife-syntaktisch-nicht-richtig-145788.html
Ausgedruckt am: 22.12.2024 um 19:12 Uhr
9 Kommentare
Neuester Kommentar
Hallo
So könnte es klappen.
Ich konnts nicht ausprobieren, da ich selbst keinen Server habe
MfG Karsten
@echo off & setlocal
for /f %%i in (Dienste.txt) do (
for /f "tokens=4" %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do set Status=%%a
)
if not %STATUS%==RUNNING >>"C:\TEMP\servercheck.log" echo Dienst %%i läuft nicht & goto :end
>>"C:\TEMP\servercheck.log" echo Dienst %%i OK & goto :end
:end
pause
goto :eof
So könnte es klappen.
Ich konnts nicht ausprobieren, da ich selbst keinen Server habe
MfG Karsten
Hallo,
meiner Meinung nach muss es in etwa so aussehen
Das Problem das du beschreibst kommt daher das mit "SET" gesetzte Variablen nicht in der gleichen for-Schleife verarbeitbar sind. Warum? Keine Ahnung !
Ich würde dir aber WMI ans Herz legen ... ist um Welten schneller und flexibler.
achso und durch die x'e in der if Abfrage fängt man leere Variablen ab. und das @ unterdrückt nur den Bildschirmausdruck .. nicht aber die Umleitung in die log-Datei
ich hoffe das ich helfen konnte
MFG Tino
meiner Meinung nach muss es in etwa so aussehen
for /f %%i in (Dienste.txt) do ( set Dienst=%%i
for /f "tokens=4" %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do set STATUS=%%a
call :checkit
)
goto :end
:checkit
if not x%STATUS%==xRUNNING @echo Dienst %Dienst% läuft nicht>>c:\TEMP\servercheck.log
goto :eof
:end
pause
Das Problem das du beschreibst kommt daher das mit "SET" gesetzte Variablen nicht in der gleichen for-Schleife verarbeitbar sind. Warum? Keine Ahnung !
Ich würde dir aber WMI ans Herz legen ... ist um Welten schneller und flexibler.
achso und durch die x'e in der if Abfrage fängt man leere Variablen ab. und das @ unterdrückt nur den Bildschirmausdruck .. nicht aber die Umleitung in die log-Datei
ich hoffe das ich helfen konnte
MFG Tino
Das Problem das du beschreibst kommt daher das mit "SET" gesetzte Variablen nicht in der gleichen for-Schleife verarbeitbar sind. Warum? Keine Ahnung !
Dann möchte ich mal einen Tipp weiterreichen, der das erklärt. Ich wußte gar nicht, wie wenig ich über Batch Beschweid weiß
Zitat von @bastla:
Hallo Markus!
Meine Beispiele sind in vielen Fällen nix anderes als Anwendung der von
Biber in seinen Kommentaren und natürlich
Tutorials vermittelten Grundlagen (und Feinheiten) ...
Grüße
bastla
Hallo Markus!
Meine Beispiele sind in vielen Fällen nix anderes als Anwendung der von
Biber in seinen Kommentaren und natürlich
Tutorials vermittelten Grundlagen (und Feinheiten) ...
Grüße
bastla
Markus
...und falls heute bei der Wärme keiner Lust hat zum Batch-Tutorials-Lesen, dann noch ein Tipp zur gezielten Stichwortsuche..
Suche nach "DelayedExpansion" (hier über die Forumssuche oder bei SetLocal /? am CMD-Prompt.
Aber im Prinzip ist der Ansatz von pcschrauber durchaus praktkabel:
So ginge es ganz ohne SET und ohne SetLocal EnableDelayedExpansion.
Ggf natürlich noch ergänzt um eine Zeile für "Dienst läuft und das soll auch ins Log" und/oder %date%/%time% und Servernamen.
Grüße
Biber
P.S. Aber das Tut-Lesen bei schlechtem Wetter nachholen!
Suche nach "DelayedExpansion" (hier über die Forumssuche oder bei SetLocal /? am CMD-Prompt.
Aber im Prinzip ist der Ansatz von pcschrauber durchaus praktkabel:
for /f %%i in (Dienste.txt) do (
for /f "tokens=4" %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do call :checkit %%i %%a
)
goto :eof
:checkit Parameter1=Dienst Parameter2=Status
if /i "%2" NEQ "RUNNING" @echo Dienst %1 läuft nicht - Status ist %2 >>c:\TEMP\servercheck.log
goto :eof
pause
So ginge es ganz ohne SET und ohne SetLocal EnableDelayedExpansion.
Ggf natürlich noch ergänzt um eine Zeile für "Dienst läuft und das soll auch ins Log" und/oder %date%/%time% und Servernamen.
Grüße
Biber
P.S. Aber das Tut-Lesen bei schlechtem Wetter nachholen!
Zitat von @BigWim:
Dann möchte ich mal einen Tipp weiterreichen, der das erklärt. Ich wußte gar nicht, wie wenig ich über Batch
Beschweid weiß
Sollte es doch gehen, bitte ich darum diesen Satz aus dem Kopf zu streichen. Dann möchte ich mal einen Tipp weiterreichen, der das erklärt. Ich wußte gar nicht, wie wenig ich über Batch
Beschweid weiß
Und eigentlich benutze ich lieber WMI(VBS) und BATCH nur da, wo es gar nicht anders geht. (war aber nicht immer so )