fireemerald
Goto Top

Abarbeitung von pings in Batchdatei als Prozentanzeige visualisieren

Hallo zusammen,

wie der Titel schon andeutet geht es darum in einer Batchdatei eine Prozentanzeige einzubauen.


Die Prozentanzeige soll wie folgt eingebaut werden:

- Über eine Batchdatei wird eine IP-Adresse angegeben und die auszuführenden ping's zu der Adresse. Somit hat man schonmal den Wert der 100% entspricht. -> Anzahl der Pings.
- Bei dem ausführen der Pings werden diese nicht in cmd angezeigt, sondern in eine Textdatei geschrieben.
- Nun soll aber eine Prozentanzeige in cmd angezeigt werden, wie viel Prozent der Ping's schon ausgeführt wurden.
- Bei der Anzahl der Pings kann nicht "0" oder "garnichts" eingegeben werden, da sonst ja keine Prozentanzeige möglich wäre.
- In der Textdatei muss auf jedenfall eine Statistik der Pings enthalten sein.

Hier hab ich schonmal die Batchdatei von mir OHNE die Prozentanzeige:
@ECHO off
ECHO.
ECHO Please enter the IP-address: ( XXX.XXX.XXX.XXX )
ECHO.
SET /p ip=:
ECHO.
ECHO.
ECHO Please enter the number of ping's:  
ECHO.
set /p Anzahl_n=:
IF /i "%Anzahl_n%"=="" GOTO error  
IF /i "%Anzahl_n%"=="0" GOTO error  
ECHO.
ECHO.
ECHO in progress... this can take a few minutes...
ECHO _______________________________________________
ECHO.
ECHO IP-address: %ip%
ECHO ping's: %Anzahl_n%  
ECHO.
ECHO initialization: %date% : %time%
> ECHO already finished: ANZEIGE IN % oder 1 von XX (wenn nicht anderster möglich)
ECHO _______________________________________________
PING -n %Anzahl_n% %ip% > ping_%date%.txt
ECHO.
ECHO Successfully executed !
PAUSE
EXIT

:error
cls
ECHO.
ECHO Entered IP-address: %ip%
ECHO.
ECHO Your entry was incorrect !, 
ECHO please enter a value between 1 and 4294967295 for ping's:  
ECHO.
set /p Anzahl_n=:
IF /i "%Anzahl_n%"=="" GOTO error  
IF /i "%Anzahl_n%"=="0" GOTO error  
ECHO.
ECHO.
ECHO in progress... this can take a few minutes...
ECHO _______________________________________________
ECHO.
ECHO IP-address: %ip%
ECHO ping's: %Anzahl_n%  
ECHO.
ECHO initialization: %date% : %time%
> ECHO already finished: ANZEIGE IN % oder 1 von XX (wenn nicht anderster möglich)
ECHO _______________________________________________
PING -n %Anzahl_n% %ip% > ping_%date%.txt
ECHO.
ECHO Successfully executed !
PAUSE
EXIT

Ich hatte Google schon durchsucht aber nur folgende (etwas) hilfreiche Threads gefunden, die mich aber leider nicht weiter gebracht haben.

Batchdatei Kopieren Prozente anzeigen
Fortschrittanzeige bei batch bzw batchkopiervorgang
ping -t in Batchdatei anhalten

Wäre ganz nett wenn sich der User "Biber", der in den anderen Beiträgen schöne Beispiele gegeben hatte, hier auch etwas gutes im Petto hätte face-smile


Hoffe auf einige gute Antworten


Mfg, FireEmerald

Content-ID: 175250

Url: https://administrator.de/contentid/175250

Ausgedruckt am: 26.11.2024 um 01:11 Uhr

bastla
bastla 25.10.2011 um 14:40:51 Uhr
Goto Top
Hallo FireEmerald und willkommen im Forum!

Nun bin ich leider nicht Biber, daher nur einige Hinweise:

  • Um während des Pingens den Fortschritt anzeigen zu können, könntest Du eine Schleife verwenden und jeweils nur ein einzelnes Paket abschicken ("ping -n 1") ...

  • Die Fehlerbehandlung ist suboptimal und vor allem ist es sinnlos, in ":error" praktisch den gleichen Programmteil wie oben zu verwenden - da könntest Du gleich oben eine passende Schleife einsetzen.

  • "exit" ohne "/b" ist oft sinnlos (und stört zusätzlich beim Testen) - "goto :eof" tut's zumeist auch ...

  • Während der "few minutes" könntest Du (in Bezug auf Deine Zeilen 8, 19, 36 und 47) mal hier vorbeischauen ... face-wink

Grüße
bastla
Skyemugen
Skyemugen 25.10.2011 um 14:50:41 Uhr
Goto Top
Aloha,

hm, ob du dich mit einer Abarbeitung mit einzelnen pings zufrieden geben willst?
setlocal enabledelayedexpansion
set /p cnt=
for /L %%s in (1,1,%cnt%) do (
	set /a perc=%%s*100/%cnt%*100/100
	echo already finished !perc!%%
	PING -n 1 %ip% >>ping_%date%.txt 
)

zugegeben: suboptimal, denn einzelne Pakete können auch mal im Nirvana landen face-wink

Aber mir würde momentan nichts schöneres einfallen.

greetz André

P.S.: too late batch wollte nicht Mathe wie ich wollte ... bei ihm ist alles < 0 = 0 ergo war alles 0 ...
FireEmerald
FireEmerald 25.10.2011 um 15:04:56 Uhr
Goto Top
Wie du schon bemerkt hast, habe ich noch nicht so tiefreichende Kentnisse von Batchdateien. Deshalb sind für dich einige Zeilen sicherlich überflüssig oder sinnlos. Für mich sind die Zeilen einfach besseres Verständnis face-smile

- "exit" ohne "/b" sind zumeist sinnlos -> Das exit hätte ich weglassen können hab ich jetzt bemerkt.
- "goto :eof" - Dieser Befehl springt automatisch zum Ende der Batchdatei (beendet die aktuelle Prozedur) -> Nachgelesen
- Während der "few minutes"... -> Eigentlich auch unnütz, weiß face-smile

Jetzt aber zu deiner möglichen Lösung:
Um während des Pingens den Fortschritt anzeigen zu können, könntest Du eine Schleife verwenden und jeweils nur ein einzelnes Paket abschicken (also "ping -n 1" verwenden) ...

-> Genau das weiß ich nicht genau wie ich das schreiben soll. Da bringt mir das auch leider nichts. Ein kurzes Beispiel wäre ganz praktisch face-smile
FireEmerald
FireEmerald 25.10.2011 um 15:55:50 Uhr
Goto Top
Erstmal danke für das Beispiel.

Das einzelne anpingen hat aber leider zur Folge, dass man nach 100 pings garkeine Statistik hat, wie viele jetzt wirklich durchgekommen sind... Da bringt die Prozentanzeige leider auch nicht viel face-smile

Also in der Textdatei muss auf jedenfall eine Statistik zu sehen sein.
Skyemugen
Skyemugen 25.10.2011 um 16:24:48 Uhr
Goto Top
Davon war im EP nichts die Rede face-wink
FireEmerald
FireEmerald 25.10.2011 um 16:43:11 Uhr
Goto Top
Das war für mich selbstverständlich, da das Pingen normal dazu benutzt wird, zu testen ob zwei Rechner miteinander verbindung haben.

Dazu kommt noch das eine Prozentanzeige sich erst ab einer gewissen Menge an Pings lohnt, keiner würde bei über 100 Pings jeden Pingeintrag in der Textdatei durchschauen und zählen erfolgreich, nicht erfolgreich, erfolgreich, nicht erfolgreich... xD

Aber ich habe es ergänzt face-smile
Skyemugen
Skyemugen 25.10.2011 um 16:56:35 Uhr
Goto Top
Aloha,

man kann ja auch mit findstr rumspielen und eine sich addierende Variable machen face-wink

set /a "good=0"  
for ... do (
...
ping administrator.de -n 1 |findstr /c:"Empfangen = 1" && set /a "good+=1"  
)
echo Gesendete Pakete: %cnt% - Empfangene Pakete: %good%

oder so ... da lässt sich vieles realisieren

greetz André

bastla
bastla 25.10.2011 um 16:58:00 Uhr
Goto Top
Hallo FireEmerald!
keiner würde bei über 100 Pings jeden Pingeintrag in der Textdatei durchschauen und zählen erfolgreich, nicht erfolgreich, erfolgreich, nicht erfolgreich... xD
Ein (ungetesteter) Batch schon:
...
    PING -n 1 %ip% >nul 2>nul && (set /a Empf+=1) || (set /a Verl+=1)
)
set /a EmpfPct=Empf*100/cnt
set /a VerlPct=Verl*100/cnt
>>ping_%date%.txt  echo %cnt% Pakete: %Empf% (= %EmpfPct% %%) empfangen, %Verl% (= %VerlPct% %%) verloren
BTW: Du verwendest doch zumindest XP?

Grüße
bastla

P.S.: Der Hinweis (und Link) oben bezog sich auf "Ping's" ...

[Edit] Überzähliges "r" bei "%EmpfPct%" und "%VerlPct%" entfernt [/Edit]
FireEmerald
FireEmerald 25.10.2011 um 18:07:04 Uhr
Goto Top
Hab jetzt mal etwas getestet, bin bis jetzt aber nicht wirklich auf etwas funktionierendes gestoßen. Hängt damit zusammen das ich Teile der Batcheinträge von euch nicht verstehe.

- >nul 2>nul &&
- set /a EmpfPct=Empf*100/cnt

ps.: Mein Windows ist nicht so aus dem Mittelalter wie meine Batch Kentnisse ... -_-" (win7 ultimate)
bastla
bastla 25.10.2011 um 19:34:18 Uhr
Goto Top
Hallo FireEmerald!

Vielleicht geht's ja mit der korrigierten Zeile 6 besser ...
>nul 2>nul
set /a EmpfPct=Empf*100/cnt
Berechnung des Prozentsatzes der erfolgreichen Pings und Zuweisung zur Variablen %EmpfPct% (siehe dazu "set /?") ...

Grüße
bastla
FireEmerald
FireEmerald 25.10.2011 um 19:55:02 Uhr
Goto Top
okey,.... Die Batchdatei läuft jetzt wenigstens mal, allerdings funktioniert die Prozentausgabe in der Textdatei nicht. Die Prozentanzeige innerhalb von CMD dagegen geht einwandfrei face-smile

Folgenden Code verwendet:
@ECHO OFF
setlocal enabledelayedexpansion
ECHO.
ECHO Please enter the IP-address: ( XXX.XXX.XXX.XXX )
ECHO.
SET /p ip=:
ECHO.
ECHO.
ECHO Please enter the number of ping's:  
ECHO.
set /p Anzahl_n=:
IF /i "%Anzahl_n%"=="" GOTO error  
IF /i "%Anzahl_n%"=="0" GOTO error  
GOTO finish

:finish
for /L %%s in (1,1,%Anzahl_n%) do (
set /a perc=%%s*100/%Anzahl_n%*100/100
ECHO in progress... this can take a few minutes...
ECHO _________________________________________________
ECHO.
ECHO IP-address: %ip%
ECHO Ping's: %Anzahl_n%  
ECHO.
echo Already finished: !perc!%%
ECHO _________________________________________________
PING -n 1 %ip% >nul 2>nul && (set /a Empf+=1) || (set /a Verl+=1)
cls
)
set /a EmpfPct=Empf*100/cnt
set /a VerlPct=Verl*100/cnt
>>ping_%date%.txt  echo %Anzahl_n% Pakete: %Empf% (= %EmpfPct% %%) empfangen, %Verl% (= %VerlPct% %%) verloren
cls
ECHO Successfully executed - %date% : %time%
ECHO _________________________________________________
ECHO.
ECHO IP-address: %ip%
ECHO Ping's: %Anzahl_n%  
ECHO.
ECHO Check "ping_%date%.txt" for the result...  
ECHO _________________________________________________
ECHO.
ECHO.
PAUSE
EXIT

:error
cls
ECHO.
ECHO Entered IP-address: %ip%
ECHO.
ECHO Your entry was incorrect !, 
ECHO please enter a value between 1 and 4294967295 for ping's:  
ECHO.
set /p Anzahl_n=:
IF /i "%Anzahl_n%"=="" GOTO error  
IF /i "%Anzahl_n%"=="0" GOTO error  
GOTO finish

Ausgabe in der Textdatei:
500 Pakete: 497 (=  %) empfangen, 3 (=  %) verloren

Der Max Ping, bzw. Min Ping wird in der Textdatei leider nicht aufgelistet, da ja beim Pingen mit ">nul 2>nul" gefiltert wird. War ja aber auch niergends erwähnt das dies auch noch in der Textdatei drin sein sollte...
Nett wäre es sicherlich wenn dies auch noch drin stehen würde, aber ich hab ehrlich gesagt kp wie das gehen könnte :D

Diesen Filterbefehl ">nul 2>nul" verstehe ich allerdings immer nochnicht genau. Als Ausgabe bei einem normalen Ping erhält man ja "Antwort von 62.104.20.189: Bytes=32 Zeit=31ms TTL=56" wie soll da jetzt was mit ">nul 2>nul" gefiltert werden ? xD

MfG, FireEmerald

ps.: Vereinfachungen und unnötige Zeilen bitte ignorieren ^_^
bastla
bastla 25.10.2011 um 20:05:39 Uhr
Goto Top
Hallo FireEmerald!

Wenn Du auf Deine Variablennamen (konkret: %Anzahl_n%) bestehst, dann aber auch konsequent die Variable "cnt" dadurch ersetzen ...
Diesen Filterbefehl ">nul 2>nul" verstehe ich allerdings immer nochnicht genau.
Hat ja auch niemand behauptet, dass das ein Filter wäre - es handelt sich hier um eine Ausgabeumleitung ins "Nichts" - deshalb wird auch keine Ausgabe der einzelnen "ping"-Befehle angezeigt.

Grüße
bastla
FireEmerald
FireEmerald 25.10.2011 um 21:00:12 Uhr
Goto Top
+++ Ein großes Lob an Skyemugen und ein noch größeres an bastla !!! face-smile +++


Du meintest sicherlich die Zeilen:
set /a EmpfPct=Empf*100/Anzahl_n
set /a VerlPct=Verl*100/Anzahl_n

Das hatte ich vorhin schonmal durch "Anzahl_n" und einmal durch "%Anzahl_n%" ersetzt, allerdings hatte ich es nochnicht mit der kleinen Änderung von dir ""r" bei "%EmpfPct%" und "%VerlPct%" entfernt"" getestet.

Jetzt funktioniert auch die Auswertung in der Textdatei.


Das ">nul 2>nul" leitet also Antwort von 62.104.20.189: Bytes=32 Zeit=31ms TTL=56 in's nichts weiter, sprich es wird nicht angezeigt in cmd.



MfG, FireEmerald
Biber
Biber 25.10.2011 um 21:17:02 Uhr
Goto Top
Moin Feuerstein,

willkommen im Forum auch von mir.
Ich vesuch mal bastla ein wenig zu entlasten - der hat mit dir heute ja schon eine komplette Schicht verbracht. face-wink

Zu deiner letzten offenen Frage im Vor-Kommentar:
Der Satz ...
ist zwar im Sinne von Konrad Duden und Bastian Sick vorbildlich, aber die Aussage darin wird klarer im etwas optisch entzerrten Nochmal-Lesen.


--> anders formuliert:

--> Alles nach einem "&&" wird nur bei Erfolg des vorangegangenen Befehls ausgeführt.
--> Zu sehen ist das Ergebnis des Ping-Befehls ja nicht (wegen der Ausgabe-und Fehlerumleitung nach "NUL")
--> Aber prüfen und auswerten kannst du den ERRORLEVEL-Wert 0 = ERFOLG bzw ERRORLEVEL ungleich 0 = GRÜTZE

Grüße
Biber
FireEmerald
FireEmerald 29.10.2011 um 18:31:58 Uhr
Goto Top
Abschliesend poste ich mal noch das ganze funktionierende Script.
Vielleicht kann es ja noch jemand anderst gebrauchen face-smile

Ping Script mit Prozentanzeige:
@ECHO OFF
setlocal enabledelayedexpansion
ECHO Ping Script v1.0 - %date% : %time%
ECHO _________________________________________________
ECHO.
ECHO Please enter the IP-address: ( XXX.XXX.XXX.XXX )
ECHO.
SET /p ip=:
ECHO.
ECHO.
ECHO Please enter the number of ping's:  
ECHO.
set /p Anzahl_n=:
IF /i "%Anzahl_n%"=="" GOTO error  
IF /i "%Anzahl_n%"=="0" GOTO error  
GOTO finish

:finish
for /L %%s in (1,1,%Anzahl_n%) do (
set /a perc=%%s*100/%Anzahl_n%*100/100
ECHO in progress... this can take a few minutes...
ECHO _________________________________________________
ECHO.
ECHO IP-address: %ip%
ECHO Ping's: %Anzahl_n%  
ECHO.
echo Already finished: !perc!%%
ECHO _________________________________________________
PING -n 1 %ip% >nul 2>nul && (set /a Empf+=1) || (set /a Verl+=1)
cls
)
set /a EmpfPct=Empf*100/Anzahl_n
set /a VerlPct=Verl*100/Anzahl_n
>>ping_%date%.txt  ECHO Ping Script v1.0 - %date% : %time% - RESULT:
>>ping_%date%.txt  ECHO __________________________________________________________
>>ping_%date%.txt  ECHO. 
>>ping_%date%.txt  ECHO %Anzahl_n% packages total - received: %Empf% (= %EmpfPct% %%), lost: %Verl% (= %VerlPct% %%)
>>ping_%date%.txt  ECHO __________________________________________________________
ipconfig >>ping_%date%.txt
cls
ECHO Successfully executed - %date% : %time%
ECHO _________________________________________________
ECHO.
ECHO IP-address: %ip%
ECHO Ping's: %Anzahl_n%  
ECHO.
ECHO Check "ping_%date%.txt" for the result...  
ECHO _________________________________________________
ECHO.
ECHO.
PAUSE
EXIT

:error
cls
ECHO Ping Script v1.0 - %date% : %time%
ECHO _________________________________________________
ECHO.
ECHO Entered IP-address: %ip%
ECHO.
ECHO Your entry was incorrect !, 
ECHO please enter a value between 1 and 4294967295 for ping's:  
ECHO.
set /p Anzahl_n=:
IF /i "%Anzahl_n%"=="" GOTO error  
IF /i "%Anzahl_n%"=="0" GOTO error  
GOTO finish
MfG, FireEmerald

ps.: Danke noch für deine sehr verständliche erklärung Biber face-smile
Mehr von FireEmeraldFireEmeraldHtop zeigt CPU Auslastung nicht korrektFireEmerald - 6 KommentareFireEmeraldSSD Secure Erase Status LockedFireEmeraldFireEmeraldExcel Formel - Zeilen eines Bereichs mit Zellenwerten definierenFireEmerald - 2 KommentareFireEmeraldHKEY CLASSES ROOT von anderem User bearbeitenFireEmerald - 4 Kommentare
Heiß diskutiert
superfun2k24Sophos SFOS 20 DNAT funktioniert nichtsuperfun2k24 - 26 KommentareLangaberWindows Server Sicherung Restore - MöglichkeitenLangaber - 21 KommentaremaisenkaiserSwitch ohne STP ins Netzwerkmaisenkaiser - 20 Kommentareprplemk2Testumgebung bauen (Grundlegend)prplemk2 - 19 KommentareBlitterWindows 10 u. 11 und 802.1x Netzwerk PortsecurityBlitter - 15 KommentareTJ.Hooker74Dom.Admin-Passwort ändern - Auswirkungen auf EX, HCW, AADCTJ.Hooker74 - 15 KommentaremaxMicrosoft plant für 2025 mehrere Preiserhöhungenmax - 14 KommentareleberkaeseFB7590 ISDN Fax-Funktionleberkaese - 13 KommentareUnluckyProccess1999Creo 4.0 Lizenz Server (LMTOOLS)UnluckyProccess1999 - 13 KommentareEnrixkHilfe bei Netzwerkinfrastruktur für AbschlussprojektEnrixk - 12 KommentareDaniSIP Zugangsdaten von Vodafone erhaltenDani - 12 KommentareHemingwayWord Makro soll aktuelle Datei regelmäßig kopieren und speichernHemingway - 11 Kommentare