Problem mit FOR-Schleife
Guten Morgen an alle,
gestern hatte ich eine Frage zum Auslesen des Dienst-Status auf einem entfernten, wo mir Torsten helfen konnte.
Nun hab ich das Ding versucht auszubauen und habe ein Problem mit einer FOR-Schleife (die ich grundsätzlich leider nie so ganz verstanden habe).
Es geht um den Bereich Massenprüfung. Ich möchte die Prüfung für jeden Client machen, der in einer extern vorgehaltenen Liste "Computer.txt" steht.
Leider bricht mir das Script genau an der Stelle ab und ich befürchzte dass es was mit meiner FOR-Schleife zu tun hat.
Kann mir da mal jemand unter die Arme greifen?
Vielen Dank!
Gruß
Lars
gestern hatte ich eine Frage zum Auslesen des Dienst-Status auf einem entfernten, wo mir Torsten helfen konnte.
Nun hab ich das Ding versucht auszubauen und habe ein Problem mit einer FOR-Schleife (die ich grundsätzlich leider nie so ganz verstanden habe).
Es geht um den Bereich Massenprüfung. Ich möchte die Prüfung für jeden Client machen, der in einer extern vorgehaltenen Liste "Computer.txt" steht.
Leider bricht mir das Script genau an der Stelle ab und ich befürchzte dass es was mit meiner FOR-Schleife zu tun hat.
Kann mir da mal jemand unter die Arme greifen?
cls
set /p Dienstname=Bitte Dienstname (nicht Anzeiguename!) eingeben:
:AbfrageEinzelOderMasse
set /p EinzelOderMasse="Möchten Sie eine (E)inzel- oder (M)assenprüfung (mit Liste) durchführen?"
if /i %EinzelOderMasse% == e goto :Einzelpruefung
if /i %EinzelOderMasse% == m goto :Massenpruefung
cls
@echo Falsche Eingabe
goto :AbfrageEinzelOderMasse
:Massenpruefung
for /f %%i in ("Computernamen.txt") do (
@echo Prüfe %Computer2Check%
for /f "tokens=4" %%a in ('sc \\%%i query %dienstname% ^| find "STATE"') do set Status=%%a
)
if not %STATUS%==RUNNING goto :ServiceStopped
EXIT
:Einzelpruefung
Set /p Computer2Check=Bitte Comuternamen eingeben:
for /f "tokens=4" %%a in ('sc \\%Computer2Check% query %dienstname% ^| find "STATE"') do set Status=%%a
if not %STATUS%==RUNNING goto :ServiceStopped
@echo Status des Dienstes "%Dienstname%" ist %Status%
pause
:ServiceStopped
@echo %Computer2Check%;%time%;%date% >>\\filer-a\protokolle$\%date%_ServiceStopped.log
Vielen Dank!
Gruß
Lars
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135135
Url: https://administrator.de/contentid/135135
Ausgedruckt am: 25.11.2024 um 01:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Larz!
... mit "
Grüße
bastla
abe mittels Pause gesehen (ohne deine Ergänzung), dass anstatt den EInzelnen Namen in der Liste in der Variable %%i der Dateiname Computer.txt steht
Solange Du das "usebackq
" nicht angibst, wird "Computer.txt" nicht als Dateiname, sondern als Text interpretiert ...... mit "
usebackq
" sollte es aber klappen.Grüße
bastla
Hallo,
schau dir das einmal an:
schau dir das einmal an:
@echo off
cls
set /p Dienstname=Bitte Dienstname (nicht Anzeiguename!) eingeben:
:AbfrageEinzelOderMasse
set /p EinzelOderMasse="Möchten Sie eine (E)inzel- oder (M)assenprüfung (mit Liste) durchführen?"
if /i %EinzelOderMasse% == e goto :Einzelpruefung
if /i %EinzelOderMasse% == m goto :Masse
cls
@echo Falsche Eingabe
goto :AbfrageEinzelOderMasse
:Einzelpruefung
Set /p Computer2Check=Bitte Comuternamen eingeben:
for /f "tokens=4" %%a in ('sc \\%Computer2Check% query %dienstname% ^| find "STATE"') do set Status=%%a
if not %STATUS%==RUNNING call :ServiceStopped %computer2check%
@echo Status des Dienstes "%Dienstname%" ist %Status%
pause
:Masse
for /f %%a in (Computernamen.txt) do (
echo Prüfe %%a
for /f "tokens=4" %%b in ('sc \\%%a query %dienstname% ^| find "STATE"') do if not %%b==RUNNING call :ServiceStopped %%a
)
EXIT
:ServiceStopped
@echo %1;%time%;%date% >>\\filer-a\protokolle$\%date%_ServiceStopped.log
Moin 5t8d1e,
Sauber. Als winzigkleine Ergänzung...
... vielleicht noch nach Zeile 19 oder 20 (jedenfalls zwischen Block ":Einzelpruefung" und ":Masse") ein "GoTo :eof" ?
@Larz
Und wenn überhaupt ein EXIT in einem Batch... dann sollte es in allen denkbaren Fällen ( User bricht ab, Einzelverarbeitung , Massenverarbeitung) verwendet werden, nicht nur in einem UseCase.
Grüße
Biber
Sauber. Als winzigkleine Ergänzung...
... vielleicht noch nach Zeile 19 oder 20 (jedenfalls zwischen Block ":Einzelpruefung" und ":Masse") ein "GoTo :eof" ?
@Larz
Und wenn überhaupt ein EXIT in einem Batch... dann sollte es in allen denkbaren Fällen ( User bricht ab, Einzelverarbeitung , Massenverarbeitung) verwendet werden, nicht nur in einem UseCase.
Grüße
Biber