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

Frage Entwicklung Batch & Shell

GELÖST

Probleme mit verschachtelter For Schleife

Mitglied: Cyberrico

Cyberrico (Level 1) - Jetzt verbinden

15.05.2013, aktualisiert 14:44 Uhr, 1364 Aufrufe, 10 Kommentare, 2 Danke

Hallo an alle!

Ich möchte mit diesem Skript mehrere IP Adressen pingen. Derzeit funktioniert das Skript mit einer IP Adresse einwandfrei. Beim Einlesen der IP Adressenliste (ipadressen1.txt, jede IP Adresse steht in einer Zeile) funktioniert die darüber gelegte for Schleife nicht mehr. Kann mir da jemand weiterhelfen?

01.
@echo off 
02.
setlocal ENABLEDELAYEDEXPANSION 
03.
set jahr=%date:~-4% 
04.
set monat=%date:~-7,2% 
05.
set tag=%date:~-10,2% 
06.
set stunden=%Time:~-11,2% 
07.
set minuten=%Time:~-8,2% 
08.
set sekunden=%Time:~-5,2% 
09.
 
10.
set log=status_%tag%.%monat%.%jahr%.txt 
11.
set ausw=auswertung_%tag%.%monat%.%jahr%.txt 
12.
set iplist=ipadressen1.txt 
13.
Set "MIN_MAX_AVG=Offline" 
14.
 
15.
set count=1 
16.
set Wiederholungen=4 
17.
set Zeitlimit=2000 
18.
set Groesse=2000 
19.
set ABBRUCHNANZAHL=3 
20.
 
21.
@echo Testbeginn am %DATE% um %TIME% >>%ausw% 
22.
 
23.
	:Again 
24.
	rem wäre ganz toll, wenn das so ähnlich funktionieren würde.... 
25.
         rem for /f %%f in (%iplist%) do (set ip=%%f && echo %%f 
26.
 
27.
  	echo ...bisher %count% Ping-Tests mit %ip% 
28.
  	Ping %ip% -n %Wiederholungen% -w %Zeitlimit% -l %Groesse% >>%log% 
29.
		for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Pakete" %log%') do (Set "SEND_RECV_LOST=Gesendet:%%i - Empfangen:%%j - Verloren:%%k" && Set "LOSTs=%%k") 
30.
  			for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Minimum" %log%') do (if %LOSTs% == %Wiederholungen% (Set "MIN_MAX_AVG=Offline") else (Set "MIN_MAX_AVG=Online - Minimum:%%i - Maximum:%%j - Mittelwert:%%k")) 
31.
  	echo %date% - %time% - %ip% - %SEND_RECV_LOST% - %MIN_MAX_AVG% >>%ausw% 
32.
 
33.
set /a count=count+1 
34.
IF %count% LEQ %ABBRUCHNANZAHL% Goto Again: 
35.
	rem ) 
36.
 
37.
@echo Testende am %DATE% um %TIME% >>%ausw% 
38.
exit
Danke für eure Hilfe.
Mitglied: Penny.Cilin
15.05.2013, aktualisiert um 13:21 Uhr
Keine Begrüssung.

Das erste was mir auffällt, ist daß Du ein GoTo innerhalb einer FOR Schleife hast, welche aus der FOR-Schleife rausspringt.
Schau Dir mal das Tutorial zur FOR-Schleife an.

Zudem würde ich u.U. ein
 setlocal ENABLEDELAYEDEXPANSION
setzen.


auch kein gruß

Penny
Bitte warten ..
Mitglied: Cyberrico
15.05.2013, aktualisiert um 14:12 Uhr
Danke für den Tipp, der hilft aber dennoch nicht weiter, da es nicht daran liegt. Quasi auch beim Ausblenden der :Again Marke und der Goto Funktion stimmt etwas mit den For Schleifen nicht.

Ich habe das funktionierende Skript beigefügt:

01.
@echo off 
02.
setlocal ENABLEDELAYEDEXPANSION 
03.
set jahr=%date:~-4% 
04.
set monat=%date:~-7,2% 
05.
set tag=%date:~-10,2% 
06.
set stunden=%Time:~-11,2% 
07.
set minuten=%Time:~-8,2% 
08.
set sekunden=%Time:~-5,2% 
09.
 
10.
set log=status_%tag%.%monat%.%jahr%.txt 
11.
set ausw=auswertung_%tag%.%monat%.%jahr%.txt 
12.
set iplist=ipadressen1.txt 
13.
set ip=10.102.100.248 
14.
Set "MIN_MAX_AVG=Offline" 
15.
 
16.
set count=1 
17.
set Wiederholungen=4 
18.
set Zeitlimit=2000 
19.
set Groesse=2000 
20.
set ABBRUCHNANZAHL=3 
21.
 
22.
@echo Testbeginn am %DATE% um %TIME% >>%ausw% 
23.
 
24.
	:Again 
25.
  	echo ...bisher %count% Ping-Tests mit %ip% 
26.
  	Ping %ip% -n %Wiederholungen% -w %Zeitlimit% -l %Groesse% >>%log% 
27.
		for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Pakete" %log%') do (Set "SEND_RECV_LOST=Gesendet:%%i - Empfangen:%%j - Verloren:%%k" && Set "LOSTs=%%k") 
28.
  			for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Minimum" %log%') do (if %LOSTs% == %Wiederholungen% (Set "MIN_MAX_AVG=Offline") else (Set "MIN_MAX_AVG=Online - Minimum:%%i - Maximum:%%j - Mittelwert:%%k")) 
29.
  	echo %date% - %time% - %ip% - %SEND_RECV_LOST% - %MIN_MAX_AVG% >>%ausw% 
30.
 
31.
set /a count=count+1 
32.
IF %count% LEQ %ABBRUCHNANZAHL% Goto Again: 
33.
 
34.
@echo Testende am %DATE% um %TIME% >>%ausw% 
35.
exit
Bitte warten ..
Mitglied: hirnchen
15.05.2013 um 14:47 Uhr
Hallo Cyberrico,

So wie das Script dort steht, also mit einzelner IP wird es auch funktionieren.

Das Problem was ich in der Version aus dem ersten Beitrag sehe ist, dass du nicht einfach aus der ersten For Schleife springen kannst ohne die Logik der Auswertung zu verändern. Da gibt es zum Beispiel die variable count die einfach munter weiterzählt weil du ja aus der Schleife springst und dann wird die Schleife erneut VON VORNE gestartet, was ja mit sicherheit nicht gewollt ist.

Die einzige möglichkeit die ich in diesem Fall sehe ist, dass du zu erst alle IP Adressen in dynamische Variablen speicherst und dann anstatt mit der ersten for schleife mit einer Sprungmarke arbeitest, die auch variablen entgegen nehmen kann.

Gruss

hirnchen
Bitte warten ..
Mitglied: Cyberrico
15.05.2013 um 15:22 Uhr
Hallo Hirnchen,

wie würde denn das genau aussehen?

LG

Cyberrico
Bitte warten ..
Mitglied: bastla
15.05.2013 um 15:47 Uhr
Hallo Cyberrico und willkommen im Forum!

Wenn der gepostete Batch funktioniert sollte es genügen, den Teil ab Zeile 22 durch
01.
echo Testbeginn am %DATE% um %TIME% >>%ausw% 
02.
for /f %%i in (iplist) do call :ProcessIP %%i 
03.
echo Testende am %DATE% um %TIME% >>%ausw% 
04.
goto :eof 
05.
 
06.
:ProcessIP 
07.
echo ...bisher %count% Ping-Tests mit %1 
08.
Ping %1 -n %Wiederholungen% -w %Zeitlimit% -l %Groesse% >>%log% 
09.
for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Pakete" %log%') do (Set "SEND_RECV_LOST=Gesendet:%%i - Empfangen:%%j - Verloren:%%k" && Set "LOSTs=%%k") 
10.
for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Minimum" %log%') do (if %LOSTs% == %Wiederholungen% (Set "MIN_MAX_AVG=Offline") else (Set "MIN_MAX_AVG=Online - Minimum:%%i - Maximum:%%j - Mittelwert:%%k")) 
11.
echo %date% - %time% - %1 - %SEND_RECV_LOST% - %MIN_MAX_AVG% >>%ausw% 
12.
 
13.
set /a count+=1 
14.
IF %count% LEQ %ABBRUCHNANZAHL% Goto :ProcessIP 
15.
goto :eof
zu ersetzen (das Testen überlasse ich Dir ) ...

Grüße
bastla
Bitte warten ..
Mitglied: Cyberrico
15.05.2013 um 16:29 Uhr
Hallo bastla!

Danke für die Top Antwort! Ich habe das Skript nun getestet und muss positives als auch negatives berichten.

Positiv: Es funktioniert, wenn ich die ABBRUCHANZAHL auf 1 stelle

Negativ: Sobald die ABBRUCHZAHL erhöht wird z.B.: auf 3 macht das Skript den Pingtest sofort mit Zeile 1 3 mal, danach Zeile 2 1 mal, danach Zeile 3 1 mal..... und dann bricht das Skript ab.

Ich hätte mir das so vorgestellt, dass er nach dem Setzen der ABBRUCHANZAHL auf die Zahl 3 zuerst einen kompletten Durchgang der iplist durchführt und erst danach mit einem 2. Durchgang startet und letztendlich den 3. Durchgang startet und dann erst abbricht.

LG
Cyberrico
Bitte warten ..
Mitglied: bastla
15.05.2013, aktualisiert um 16:55 Uhr
Hallo Caberrico!

Dann wohl eher so:
01.
echo Testbeginn am %DATE% um %TIME% >>%ausw% 
02.
set /a count=1 
03.
:Again 
04.
for /f %%i in (iplist) do call :ProcessIP %%i 
05.
set /a count+=1 
06.
IF %count% LEQ %ABBRUCHNANZAHL% Goto :Again 
07.
echo Testende am %DATE% um %TIME% >>%ausw% 
08.
goto :eof 
09.
 
10.
:ProcessIP 
11.
echo ...bisher %count% Ping-Tests mit %1 
12.
Ping %1 -n %Wiederholungen% -w %Zeitlimit% -l %Groesse% >>%log% 
13.
for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Pakete" %log%') do (Set "SEND_RECV_LOST=Gesendet:%%i - Empfangen:%%j - Verloren:%%k" && Set "LOSTs=%%k") 
14.
for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Minimum" %log%') do (if %LOSTs% == %Wiederholungen% (Set "MIN_MAX_AVG=Offline") else (Set "MIN_MAX_AVG=Online - Minimum:%%i - Maximum:%%j - Mittelwert:%%k")) 
15.
echo %date% - %time% - %1 - %SEND_RECV_LOST% - %MIN_MAX_AVG% >>%ausw% 
16.
goto :eof
Grüße
bastla

[Edit] Startwert in Zeile 2 auf 1 gesetzt [/Edit]
Bitte warten ..
Mitglied: hirnchen
15.05.2013 um 16:46 Uhr
Hallo bastla,

ich denke so sollte es noch eher funktionieren:

01.
echo Testbeginn am %DATE% um %TIME% >>%ausw% 
02.
set /a count=1 
03.
:Again 
04.
for /f %%i in (%iplist%) do call :ProcessIP %%i 
05.
IF %count% LEQ %ABBRUCHNANZAHL% Goto :Again 
06.
echo Testende am %DATE% um %TIME% >>%ausw% 
07.
goto :eof 
08.
 
09.
:ProcessIP 
10.
echo ...bisher %count% Ping-Tests mit %1 
11.
Ping %1 -n %Wiederholungen% -w %Zeitlimit% -l %Groesse% >>%log% 
12.
for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Pakete" %log%') do (Set "SEND_RECV_LOST=Gesendet:%%i - Empfangen:%%j - Verloren:%%k" && Set "LOSTs=%%k") 
13.
for /F "delims==, skip=2 tokens=2,4,6" %%i in ('find "Minimum" %log%') do (if %LOSTs% == %Wiederholungen% (Set "MIN_MAX_AVG=Offline") else (Set "MIN_MAX_AVG=Online - Minimum:%%i - Maximum:%%j - Mittelwert:%%k")) 
14.
echo %date% - %time% - %1 - %SEND_RECV_LOST% - %MIN_MAX_AVG% >>%ausw% 
15.
set /a count+=1 
16.
goto :eof
Gruss
hirnchen
Bitte warten ..
Mitglied: bastla
15.05.2013, aktualisiert um 16:55 Uhr
Hallo hirnchen (und BTW: Willkommen im Forum)!

Ich hatte das so verstanden, dass die gesamte Liste dreimal abgearbeitet werden soll - bei Deinem Ansatz werden aber die getesteten Adressen gezählt ...

Hinsichtilch des Startwertes 1 für den Zähler hast du allerdings recht (korrigiere ich gleich oben) ...

Grüße
bastla
Bitte warten ..
Mitglied: Cyberrico
16.05.2013 um 08:54 Uhr
Danke euch beiden! Ihr habt mir sehr weitergeholfen.

LG
Cyberrico
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Verschachtelte FOR-Schleife mit einem Argument
gelöst Frage von mp-homeBatch & Shell3 Kommentare

Hallo Forum, ich versuche mehrere FOR-Schleifen in eine verschachtelte FOR-Schleife zu ändern. Leider scheine ich zu doof für dieses ...

Batch & Shell
Verschachtelte For Schleife für Batch Neuling
Frage von yperiuBatch & Shell3 Kommentare

Hallo liebe Profis, ich habe eine sehr umfangreiche Benchmark-Schleife zum Laufen zu bringen, die ich ohne For 72 mal ...

Batch & Shell
In einer verschachtelten For-Schleife Ping info auslesen
gelöst Frage von Tommy-TyrolBatch & Shell4 Kommentare

Hallo allerseits, quäle mich seit einiger Zeit mit folgendem Problem. In einer Textdatei (ipfil.txt) stehen IP-Adressen von rechnern welche ...

Batch & Shell
Batchfile MSDOS - Berechnung in verschachtelter FOR-Schleife
gelöst Frage von KlimatorBatch & Shell3 Kommentare

Hallo zusammen, ich möchte in einer dreifach verschachtelten FOR-Schleife eine Berechnung auf Grundlage der drei hochgezählten Variablen vornehmen, doch ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...

Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall9 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen8 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...