Top-Themen

Aktuelle Themen (A bis Z)

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

Batchprogrammierung GOTO-Sprungmarken innerhalb einer Schleife.

Frage Entwicklung Batch & Shell

Mitglied: Metzger000

Metzger000 (Level 1) - Jetzt verbinden

25.11.2011, aktualisiert 18.10.2012, 7731 Aufrufe, 6 Kommentare

Mein Skript bricht bei einer GOTO-Sprungmarke innerhalb einer For-Schleife ab. Ich weiß aber nicht warum.

Hallo zusammen. Ich habe ein kleines Skript geschrieben, welches immer abbricht wenn er zu der Sprungmarke "goto PATCHWECHSEL" kommt.
Zur Erklärung
In der Datei "\\%%d\d$\VRZ\Logs\Installationsprotokoll.txt" werden bei uns die Einzelnen Patchinstallationen nachgehalten (Auszug aus dieser Datei "03.07.2007 09:23:48: K_20_SRC_6.0 Ende Deinstallation auf Server")
In der Datei "anpassen_server.txt" sind die Server angegeben von denen die Ausgabe kommen soll.
In der Datei "anpassen_patche.txt" sind die Patche angegeben ( Bei dem obrigen Auszug ist es z.B. K_20_SRC_6.0)

Mein Ziel ist, dass ich auf den Servern prüfen möchte, ob ein Patch installiert wurde und ob danach gebootet wurde. Wenn ich die Sprungmarke entnehme läuft das Script durch, aber die Ausgabe wird unsauber und die Daten sind falsch, weil die falschen Variablen übergeben werden.

Gibt es denn noch eine Möglichkeit innerhalb einer Forschleife zu spingen?




01.
@echo on 
02.
setlocal ENABLEDELAYEDEXPANSION 
03.
 
04.
rem löschen der alten Auswertungsdatei  
05.
if /i exist auswertung_*.log del /q auswertung_*.log 
06.
rem Datumseinstellung 
07.
for /f "tokens=1,2,3 delims=." %%a in ('echo %date%') do set datum=%%c-%%b-%%a 
08.
rem Log-Variabel 
09.
set logs=auswertung_%datum%.log 
10.
rem Serverauswahl  
11.
for /f %%d in (anpassen_server.txt) do ( 
12.
rem Serverausgabe 
13.
	echo %%d>>%logs% 
14.
rem Protokoll-Variabel 
15.
	set instprot=\\%%d\d$\VRZ\Logs\Installationsprotokoll.txt 
16.
rem Abfrage ob Protokoll vorhanden ist 
17.
	if /i not exist !instprot! echo Das Protokoll fehlt>>%logs% & goto SERVERWECHSEL 
18.
rem Abfrage des letzten Bootvorgangs 
19.
	for /f %%e in ('WMIC.EXE /Node:%%d /Output:STDOUT Path Win32_OperatingSystem Get LastBootUpTime /Format:TABLE') do set lastboot=%%e 
20.
	set lastboot=!lastboot:~0,14! 
21.
rem Patchauswahl 
22.
	for /f "tokens=1" %%f in (anpassen_patche.txt) do ( 
23.
rem Prüfung on der Patch erfolgreich installiert wurde 
24.
		for /f "tokens=3 delims= " %%w in ('find /i /c "%%f Abgeschlossen" !instprot!') do ( 
25.
			set patch=%%w 
26.
27.
		if !patch! EQU 0 echo Der Patch %%f fehlt >>%logs% & ##red| goto PATCHWECHSEL##   
28.
rem Installationszeitpunkt ermitteln		 
29.
		for /f "tokens=1,2,3,4 delims= " %%g in ('find /i "%%f Abgeschlossen" !instprot!') do set installdate=%%g & set installtime=%%h 
30.
		echo !installdate!!installtime!>>%logs% 
31.
		set patchdate=!installdate:~6,4!!installdate:~3,2!!installdate:~0,2!!installtime:~0,2!!installtime:~3,2!!installtime:~6,2! 
32.
rem Ausgabe in die Datei  
33.
			echo %%f !patchdate!>>%logs% 
34.
			echo !lastboot!>>%logs%  
35.
##red|:PATCHWECHSEL## 
36.
	echo. 
37.
38.
:SERVERWECHSEL 	 
39.
echo. >>%logs% 
40.
)
Mitglied: Skyemugen
25.11.2011, aktualisiert 18.10.2012
Aloha,

  1. benutze bitte die <code></code>-Formatierung ...
  2. goto innerhalb einer Schleife ist unzulässig, ein wenig Suchen (link) hier im Forum hätte dir das aber längst gesagt ... wenn du aus einer Schleife eine Sprungmarke aufrufen willst, tu das bitte mit call: Sprungmarke und vergiss das oder eventuell die goto :eof nicht

greetz André
Bitte warten ..
Mitglied: Metzger000
25.11.2011 um 11:20 Uhr
Ich habe es jetzt mal ausprobiert mit call.

Meinst du so etwa? Das klappt bei mir immer noch nicht. Mit der goto :EOF weiß ich nicht genau, wie ich das implementieren könnte, weil es ja ans Ende der Batchdatei geht und nicht ans Ende meiner Schleife, oder irre ich mich?

01.
@echo on 
02.
setlocal ENABLEDELAYEDEXPANSION 
03.
 
04.
rem löschen der alten Auswertungsdatei  
05.
if /i exist auswertung_*.log del /q auswertung_*.log 
06.
rem Datumseinstellung 
07.
for /f "tokens=1,2,3 delims=." %%a in ('echo %date%') do set datum=%%c-%%b-%%a 
08.
rem Log-Variabel 
09.
set logs=auswertung_%datum%.log 
10.
 
11.
rem Serverauswahl 
12.
:SERVERANWAHL  
13.
for /f %%d in (anpassen_server.txt) do ( 
14.
rem Serverausgabe 
15.
	echo %%d>>%logs% 
16.
rem Protokoll-Variabel 
17.
	set instprot=\\%%d\d$\VRZ\Logs\Installationsprotokoll.txt 
18.
rem Abfrage ob Protokoll vorhanden ist 
19.
	if /i not exist !instprot! echo Das Protokoll fehlt>>%logs% & call :SERVERNEXT 
20.
 
21.
rem Abfrage des letzten Bootvorgangs 
22.
:BOOTVORGANG 
23.
	for /f %%e in ('WMIC.EXE /Node:%%d /Output:STDOUT Path Win32_OperatingSystem Get LastBootUpTime /Format:TABLE') do set lastboot=%%e 
24.
	set lastboot=!lastboot:~0,14! 
25.
 
26.
rem Patchauswahl 
27.
:PATCHANWAHL 
28.
	for /f "tokens=1" %%f in (anpassen_patche.txt) do ( 
29.
rem Prüfung on der Patch erfolgreich installiert wurde 
30.
		for /f "tokens=3 delims= " %%w in ('find /i /c "%%f Abgeschlossen" !instprot!') do set patch=%%w 
31.
		if !patch! EQU 0 echo Der Patch %%f fehlt >>%logs% & goto :PATCHNEXT 
32.
rem Installationszeitpunkt ermitteln 
33.
:INSTALLATIONSZEITPUNKT		 
34.
		for /f "tokens=1,2,3,4 delims= " %%g in ('find /i "%%f Abgeschlossen" !instprot!') do set installdate=%%g & set installtime=%%h 
35.
		echo !installdate!!installtime!>>%logs% 
36.
		set patchdate=!installdate:~6,4!!installdate:~3,2!!installdate:~0,2!!installtime:~0,2!!installtime:~3,2!!installtime:~6,2! 
37.
rem Ausgabe in die Datei  
38.
		echo %%f !patchdate!>>%logs% 
39.
		echo !lastboot!>>%logs%  
40.
:PATCHENDE 
41.
		echo.	 
42.
 
43.
44.
 
45.
:SERVERENDE 
46.
echo. >>%logs% 
47.
48.
 
49.
Exit 
50.
 
51.
 
52.
:PATCHNEXT 
53.
goto PATCHENDE 
54.
	 
55.
:SERVERNEXT 
56.
goto SERVERENDE 
57.
 
Bitte warten ..
Mitglied: Skyemugen
25.11.2011 um 12:25 Uhr
Aloha,

da ich bei dir nicht durchblicke, wann was wohin gehen soll und ob es beendet werden soll oder danach weitergeführt, bekommst du vorläufig einfach nur eine Erklärung zum call und goto :eof.

  1. mit call rufst du hier ein Unterprogramm (per Sprungmarke) auf, das funktioniert in derselben Weise als würdest du damit eine neue Batch aufrufen ... du kannst per call :Sprungmarke %%f z.B. Laufvariablen aus Schleifen übergeben (welche dann im Unterprogramm als Parameter %1 etc. ansprechbar sind
  2. goto :eof beendet ein Programm, ist es ein Unterprogramm (per call), wird nur dieses beendet, springt zurück zum Ausgangspunkt des Programms, aus dem das Unterprogramm aufgerufen wurde und führt alles nachkommende ganz normal aus ... wenn kein Unterprogramm mehr existiert, bewirkt goto :eof, dass sich das Hauptprogramm und damit die batch beendet

Da du uns nur leere Unterprogramme :PATCHENDE und :SERVERENDE angibst bzw. halbausgefüllte, ist mir unklar, ob die nun ein Ende des Hauptprogrammes im jeweiligen Fall darstellen oder eventuell eigentlich überhaupt überflüssig sind oder doch nur einen Zwischensprung darstellen.

greetz André
Bitte warten ..
Mitglied: Metzger000
25.11.2011 um 13:09 Uhr
Hi André

Mit :PATCHENDE und :SERVERENDE will ich eigentlich nur an das Ende der Schleifen springen.

Was ich ja bezwecken möchte ist, dass wenn bestimmte Voraussetzungen nicht erfüllt werden, dass die folgenden Zeilen einfach übersprungen werden.

01.
rem Prüfung on der Patch erfolgreich installiert wurde  
02.
		for /f "tokens=3 delims= " %%w in ('find /i /c "%%f Abgeschlossen" !instprot!') do set patch=%%w  
03.
		if !patch! EQU 0 echo Der Patch %%f fehlt >>%logs% & goto :PATCHNEXT 
Hiermit were ich aus, ob der Patch installiert ist. Wenn !patch! = 0 ist ist er nicht installiert und soll die folgenden Zeilen überspringen und ans Ende der Schleife springen.
Bitte warten ..
Mitglied: 60730
25.11.2011 um 17:07 Uhr
moin,

ist doch ganz einfach und eigentlich hast du dir da oben grad selber die Antwort gegeben..

27. if !patch! EQU 0 echo Der Patch %%f fehlt >>%logs%
28. if not !patch! EQU 0 for /f "tokens=1" %%f in (anpassen_patche.txt) do (

Und das nur mal eben schnell mit deinen Zeilen zusammengezimmert, ungetestet und das geht natürlich noch viel hybscher.

Gruß
Bitte warten ..
Mitglied: Metzger000
29.11.2011 um 09:07 Uhr
Danke über die Lösung hatte ich dem Augenblick noch gar nicht nachgedacht. Jetzt funktioniert mein Skript. Besten Dank dafür.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batchprogrammierung - FOR Schleifen - Speichern in Variablen - Ausgabe der Variablen
gelöst Frage von JimStarBatch & Shell6 Kommentare

Guten Tag zusammen, ich habe ein kleines Problem und komme alleine nicht weiter. Folgende Situation: Ich hab ein Batchprogramm ...

Batch & Shell
"goto" kann syntaktisch an dieser Stelle nicht verarbeitet werden
gelöst Frage von Y4nn1ckBatch & Shell14 Kommentare

Morgen, ich schreibe gerade an einem Zufallsgenerator für die Klasse, also an einem, der auswählt, wer dran kommt. Ich ...

Batch & Shell
Batch Dateiabfrage. Wenn älter als dann goto
gelöst Frage von ZunarasBatch & Shell2 Kommentare

Hallo, ich bin am basteln und möchte in meiner Batch eine Abfrage einbauen. Hier das komplette Skript: Ich möchte ...

Batch & Shell
Wenn XX freier speicher dann goto
gelöst Frage von functionstrutBatch & Shell4 Kommentare

Hallo :-) ich hänge hier irgendwie an einer kleinigkeit und bekomme es nicht hin. ich möchte das wenn 10GB ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 8 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 8 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 16 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server15 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...

Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...