Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Problem mit FOR-Schleife

Frage Entwicklung Batch & Shell

Mitglied: Larz

Larz (Level 2) - Jetzt verbinden

04.02.2010, aktualisiert 09:59 Uhr, 3545 Aufrufe, 6 Kommentare

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?

01.
cls 
02.
 
03.
set /p Dienstname=Bitte Dienstname (nicht Anzeiguename!) eingeben:  
04.
 
05.
:AbfrageEinzelOderMasse 
06.
set /p EinzelOderMasse="Möchten Sie eine (E)inzel- oder (M)assenprüfung (mit Liste) durchführen?" 
07.
if /i %EinzelOderMasse% == e goto :Einzelpruefung 
08.
if /i %EinzelOderMasse% == m goto :Massenpruefung 
09.
cls 
10.
@echo Falsche Eingabe 
11.
goto :AbfrageEinzelOderMasse 
12.
 
13.
:Massenpruefung 
14.
for /f %%i in ("Computernamen.txt") do ( 
15.
@echo Prüfe %Computer2Check% 
16.
for /f "tokens=4"  %%a in ('sc \\%%i query %dienstname% ^| find "STATE"') do set Status=%%a  
17.
18.
if not %STATUS%==RUNNING goto :ServiceStopped 
19.
EXIT 
20.
 
21.
:Einzelpruefung 
22.
Set /p Computer2Check=Bitte Comuternamen eingeben:   
23.
for /f "tokens=4"  %%a in ('sc \\%Computer2Check% query %dienstname% ^| find "STATE"') do set Status=%%a  
24.
if not %STATUS%==RUNNING goto :ServiceStopped 
25.
@echo Status des Dienstes "%Dienstname%" ist %Status% 
26.
pause 
27.
 
28.
:ServiceStopped 
29.
@echo %Computer2Check%;%time%;%date% >>\\filer-a\protokolle$\%date%_ServiceStopped.log
Vielen Dank!

Gruß
Lars
Mitglied: bastla
04.02.2010 um 10:13 Uhr
Hallo Larz!

Ändere die Zeile 14 auf:
for /f "usebackq" %%i in ("Computernamen.txt") do (
Grüße
bastla
Bitte warten ..
Mitglied: Larz
04.02.2010 um 10:32 Uhr
Hoi Bastla,

birngt leider keine Veränderung. Habe mittels Pause gesehen (ohne deine Ergänzung), dass anstatt den EInzelnen Namen in der Liste in der Variable %%i der Dateiname Computer.txt steht

Hm...

Gruß
Lars
Bitte warten ..
Mitglied: bastla
04.02.2010 um 11:49 Uhr
Hallo Larz!
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
Bitte warten ..
Mitglied: 5t8d1e
04.02.2010 um 12:33 Uhr
Hallo,

schau dir das einmal an:
01.
@echo off 
02.
cls  
03.
set /p Dienstname=Bitte Dienstname (nicht Anzeiguename!) eingeben:   
04.
 
05.
:AbfrageEinzelOderMasse  
06.
 
07.
set /p EinzelOderMasse="Möchten Sie eine (E)inzel- oder (M)assenprüfung (mit Liste) durchführen?"  
08.
if /i %EinzelOderMasse% == e goto :Einzelpruefung  
09.
if /i %EinzelOderMasse% == m goto :Masse 
10.
cls  
11.
@echo Falsche Eingabe  
12.
goto :AbfrageEinzelOderMasse  
13.
 
14.
:Einzelpruefung  
15.
Set /p Computer2Check=Bitte Comuternamen eingeben:    
16.
for /f "tokens=4"  %%a in ('sc \\%Computer2Check% query %dienstname% ^| find "STATE"') do set Status=%%a   
17.
if not %STATUS%==RUNNING call :ServiceStopped %computer2check% 
18.
@echo Status des Dienstes "%Dienstname%" ist %Status%  
19.
pause  
20.
 
21.
 
22.
:Masse 
23.
for /f %%a in (Computernamen.txt) do ( 
24.
	echo Prüfe %%a 
25.
	for /f "tokens=4"  %%b in ('sc \\%%a query %dienstname% ^| find "STATE"') do if not %%b==RUNNING  call :ServiceStopped %%a 
26.
27.
EXIT  
28.
 
29.
 
30.
  
31.
:ServiceStopped 
32.
@echo %1;%time%;%date% >>\\filer-a\protokolle$\%date%_ServiceStopped.log
Bitte warten ..
Mitglied: Biber
04.02.2010 um 13:03 Uhr
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
Bitte warten ..
Mitglied: Larz
04.02.2010 um 14:09 Uhr
Servus,

danke für die Unterstützung. Ich hab ziemlich viel Zeit mit den "" verplämpert, hab jetzt aber auch ne funktionierende Lösung und schon etwas ausgebaut:

01.
REM Dieses Script erm%oe%glicht es bei einem oder mehreren PCs den Status eines Dienstes  
02.
REM zu %ue%berpr%ue%fen. Ist der Dienst gestoppt, wird dies in ein Log geschrieben oder angezeigt 
03.
 
04.
@ECHO OFF & SETLOCAL  
05.
 
06.
REM Hier werden Variablen für die Umlaute definiert, damit Sie nachher im Text richtig angezeigt werden (ANSI/ASCI-Problem) 
07.
chcp 1252>nul 
08.
set ue=ü 
09.
set ae=ä 
10.
set oe=ö 
11.
set Uue=Ü 
12.
set Aae=Ä 
13.
set Ooe=Ö 
14.
set ss=ß 
15.
chcp 850>nul 
16.
 
17.
REM Hier wird die Farbe der Fenster bestimmt 
18.
COLOR 0E 
19.
 
20.
CLS 
21.
 
22.
 
23.
@echo ==================================================  
24.
@echo #           C H E C K   S E R V I C E            # 
25.
@echo ================================================== 
26.
@echo. 
27.
@echo Dieses Script erm%oe%glicht es bei einem oder  
28.
@echo mehreren PCs den Status eines Dienstes zu %ue%ber- 
29.
@echo pr%ue%fen. Ist der Dienst gestoppt, wird dies in  
30.
@echo ein Log geschrieben oder bei Einzelabfrage im  
31.
@echo Script angezeigt 
32.
@echo. 
33.
set /p Dienstname=Bitte Dienstname (nicht Anzeigename!) eingeben:  
34.
@echo. 
35.
:AbfrageEinzelOderMasse 
36.
set /p EinzelOderMasse="M%oe%chten Sie eine (E)inzel- oder (M)assenpr%ue%fung (mit Liste) durchf%ue%hren?" 
37.
if /i %EinzelOderMasse% == e goto :Einzelpruefung 
38.
if /i %EinzelOderMasse% == m goto :Massenpruefung 
39.
cls 
40.
@echo Falsche Eingabe 
41.
goto :AbfrageEinzelOderMasse 
42.
 
43.
:Massenpruefung 
44.
for /f "usebackq" %%i in ("Computernamen.txt") do ( 
45.
	@echo Pr%ue%fe %%i 
46.
	for /f "tokens=4"  %%a in ('sc \\%%i query %dienstname% ^| find "STATE"') do ( 
47.
		set Status=%%a 
48.
		if %%a==STOPPED @echo %%i;%dienstname%;%%a;%time%>>\\filer-a\protokolle$\%date%_ServiceStopped.log 
49.
50.
51.
PAUSE 
52.
 
53.
:Einzelpruefung 
54.
Set /p Computer2Check=Bitte Comuternamen eingeben:   
55.
for /f "tokens=4"  %%a in ('sc \\%Computer2Check% query %dienstname% ^| find "STATE"') do set Status=%%a  
56.
if not %STATUS%==RUNNING @echo %Computer2Check%;%dienstname%;%status%;%time% >>\\filer-a\protokolle$\%date%_ServiceStopped.log 
57.
@echo Status des Dienstes "%Dienstname%" ist %Status%
Funktioniert beides prima
Danke nochmal an alle Beteiligten!!!

Gruß
Larz
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

Batch & Shell
gelöst For Schleife kaputt? (5)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...