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

Echo in for-Schleife syntaktisch nicht richtig

Frage Entwicklung Batch & Shell

Mitglied: Larz

Larz (Level 2) - Jetzt verbinden

28.06.2010 um 12:17 Uhr, 3535 Aufrufe, 9 Kommentare

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:

01.
for /f %%i in (Dienste.txt) do ( 
02.
	for /f "tokens=4"  %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do set Status=%%a  
03.
	if not %STATUS%==RUNNING @echo Dienst %%i		läuft nicht>>C:\TEMP\servercheck.log 
04.
)
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
01.
@echo Dienst %%i		OK>>C:\TEMP\servercheck.log
Kann mir hier kurz jemand aushelfen? Danke

Gruß
Larz
Mitglied: Ellerbrok
28.06.2010 um 12:57 Uhr
Musst Du nicht eher

01.
@echo off 
02.
for /f %%i in (Dienste.txt) do (  
03.
	for /f "tokens=4"  %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do set Status=%%a   
04.
	if not %STATUS%==RUNNING echo Dienst %%i		läuft nicht>>C:\TEMP\servercheck.log  
05.
)
machen? Also OHNE das @?

Gruß,
Marcel
Bitte warten ..
Mitglied: kkboy94
28.06.2010 um 12:59 Uhr
Hallo

01.
@echo off & setlocal 
02.
for /f %%i in (Dienste.txt) do ( 
03.
for /f "tokens=4"  %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do set Status=%%a 
04.
)  
05.
if not %STATUS%==RUNNING >>"C:\TEMP\servercheck.log" echo Dienst %%i läuft nicht & goto :end 
06.
>>"C:\TEMP\servercheck.log" echo Dienst %%i OK & goto :end 
07.
 
08.
:end 
09.
pause 
10.
goto :eof
So könnte es klappen.
Ich konnts nicht ausprobieren, da ich selbst keinen Server habe

Mit freundlichen Grüßen Karsten
Bitte warten ..
Mitglied: pcschrauber
28.06.2010 um 14:23 Uhr
Hallo,

meiner Meinung nach muss es in etwa so aussehen
01.
for /f %%i in (Dienste.txt) do ( set Dienst=%%i 
02.
	for /f "tokens=4"  %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do set STATUS=%%a 
03.
		call :checkit 
04.
05.
goto :end 
06.
 
07.
:checkit 
08.
if not x%STATUS%==xRUNNING @echo Dienst %Dienst%		läuft nicht>>c:\TEMP\servercheck.log  
09.
goto :eof 
10.
:end 
11.
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
Mit freundlichen Grüßen Tino
Bitte warten ..
Mitglied: Larz
28.06.2010 um 14:47 Uhr
Hi Marcel,

nein, das @ ist hier nicht relevant. Geht auch ohne nicht...

Gruß Larz
Bitte warten ..
Mitglied: BigWim
28.06.2010 um 14:57 Uhr
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


Markus
Bitte warten ..
Mitglied: Larz
28.06.2010 um 15:02 Uhr
Hi Karsten,

das klappt leider nicht ganz, es erscheint im Log nur einmal der Hinweis "Dienst %i OK", egal ob der Dienst läuft oder nicht...
Kannst Du ja aber auch mit dem eigenen PC testen. Anstatt LTTFS06 einfach den eigenen PC-Namen angeben

Gruß
Lars
Bitte warten ..
Mitglied: Biber
28.06.2010 um 15:16 Uhr
...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:
01.
for /f %%i in (Dienste.txt) do (  
02.
	for /f "tokens=4"  %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do 	call :checkit %%i %%a 
03.
04.
goto :eof 
05.
 
06.
:checkit Parameter1=Dienst Parameter2=Status 
07.
if  /i "%2" NEQ "RUNNING" @echo Dienst %1 läuft nicht - Status ist %2 >>c:\TEMP\servercheck.log  
08.
goto :eof 
09.
 
10.
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!
Bitte warten ..
Mitglied: pcschrauber
28.06.2010 um 15:18 Uhr
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.
Und eigentlich benutze ich lieber WMI(VBS) und BATCH nur da, wo es gar nicht anders geht. (war aber nicht immer so )
Bitte warten ..
Mitglied: Larz
28.06.2010 um 16:22 Uhr
Hi Biber,

bei mir funktioniert diese Variante, danke! Hab das jetzt so in meine bat eingebaut:

01.
@echo __________________________________________________________>>C:\TEMP\servercheck.log 
02.
@echo Prüfe Status einzelner Dienste auf LTTFS06>>C:\TEMP\servercheck.log 
03.
@echo __________________________________________________________>>C:\TEMP\servercheck.log 
04.
 
05.
for /f %%i in (LTTFS06_Dienste.txt) do (  
06.
	for /f "tokens=4"  %%a in ('sc \\LTTFS06 query %%i ^| find "STATE"') do 	call :checkit %%i %%a 
07.
08.
goto :eof 
09.
 
10.
:checkit Parameter1=Dienst Parameter2=Status 
11.
if  /i "%2" NEQ "RUNNING" @echo Dienst %1 läuft nicht - Status ist %2 >>c:\TEMP\servercheck.log 
12.
goto :eof
Hab unter die vorletzte Zeile noch ein
01.
if  /i "%2" EQ "RUNNING" @echo Dienst %1 läuft - Status ist %2 >>c:\TEMP\servercheck.log
eingesetzt


Danke & Gruß
Larz


P.S. : Tutorials lesen bei schlechtem Wetter wird nachgeholt (bzw. wiederholt )
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

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

Frage von Juergen42 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 Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...