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 batch if Vergleich eines Prozent-Wertes

Mitglied: joni2000de

joni2000de (Level 1) - Jetzt verbinden

14.08.2009, aktualisiert 12:29 Uhr, 7224 Aufrufe, 14 Kommentare

Hallo Admins,

ich hab da mal ne Frage.

Wie kann ich in einem batch mit einer if-Abfrage %-Werte vergleichen?

set Vergleichswert1=%date%
set Vergleichswert2=5%

for /f "usebackq tokens=1,2,3,8,9 delims=;" %%a in ("%Auslesewert%") do (
if "%%a" EQU "%Vergleichswert1%" (
if "%%e" LSS "%Vergleichswert2%" echo %%a %%b %%c %%d %%e >> %Protokolldatei%
)
)

Der Wert %%e ist der Füllgrad einer Partition der in % angegeben wird (z. B. 11,32%). Jetzt möchte ich, dass alle Zeilen bei denen der Füllgrad kleiner als der angegebenen Vergleichswert (hier 5%) ist in die Protokolldatei geschrieben werden. Wenn ich das mit dem freien Platz in GB mache funktioniert das problemlos, doch ich möchte den Prozentanteil auswerten (auch 5,00% funktioniert nicht).

Bin für jeden Tipp dankbar.

Gruß Joni
Mitglied: miniversum
14.08.2009 um 12:34 Uhr
Ungetestet und ins Blaue hinein würd ich sagen versuchs mal mit dieser Zeile bei der Angabe des Vergleichswerts:
set Vergleichswert2=5^%
Bitte warten ..
Mitglied: joni2000de
14.08.2009 um 12:44 Uhr
Das ^% hat den Effekt, dass die nächste Zeile direkt hinter diese Zeile angehängt wird (sozusagen ein negativer Zeilenumbruch). Kann vielleicht auch mal ganz hilfreich sein, doch mein Problem ist damit leider nicht gelöst.

Gruß Joni
Bitte warten ..
Mitglied: miniversum
14.08.2009 um 13:42 Uhr
Schalte mach echo on bzw. lass echo off weg und schau dir an was an der Stelle interpretiert wird.
Bitte warten ..
Mitglied: joni2000de
14.08.2009 um 13:51 Uhr
Das habe ich schon gemacht. Es wird keine besondere Meldung ausgegeben. Es werden alle Zeilen in die Protokolldatei geschrieben die der ersten Vergleichsabfrage (Datum) entsprechen, egal wie hoch der angegebenen Prozentsatz ist. D. h. es wird 4,73% < 5% ebenso als wahr angenommen wie 73,28% < 5%. Wie gesagt beim Vergleich der GB funktioniert die Abfrage einwandfrei, da stehen nur Zahlen drin ohne %. Die Werte werden auch mit xx,xx% ausgegeben.
Bitte warten ..
Mitglied: Biber
14.08.2009 um 14:19 Uhr
Moin joni2000de,

Du kannst im Batch bestenfalls ganzzahlige Werte (und die auch nur bis zum Wert 32767) als Zahlenwerte miteinander und mit LSS, GTR, GEQ...etc vergleichen.
Alles, was nicht als Ganzzahl "erkannt" wird von der CMD.exe wird eben als Text verglichen.

Also vergleiche Ganzzahlen.
01.
set "Vergleichswert1=%date%" 
02.
set "Vergleichswert2=5" 
03.
 
04.
for /f "usebackq tokens=1,2,3,8,9 delims=;," %%a in ("%Auslesewert%") do ( 
05.
if "%%a" EQU "%Vergleichswert1%" ( 
06.
if "%%e" LSS "%Vergleichswert2%" echo %%a %%b %%c %%d %%e >> %Protokolldatei% 
07.
08.
)
[delims=Komma hinzugefügt und das %-Zeichen hinter den 5% rausgenommen]

Ungetestet, und so funktioniert es auch nur, wenn die Tokens in %%b, %%c und %%d nicht ein Komma enthalten.

Ich versteh nicht, warum Du nicht ein oder zwei Beispielzeilen Deiner "%Auslesewert%-Ausgabe bereitstellst.

Grüße
Biber
Bitte warten ..
Mitglied: joni2000de
14.08.2009 um 14:39 Uhr
Hallo Biber,

hier die Zeilen aus %Auslesewerte%.

Datum;Host;LW;FS;Total;used;usedP;free;freeP
14.08.2009;db01.ko.loc;C:;NTFS;16,10;12,23;76,01%;3,86;23,99%
14.08.2009;db01.ko.loc;D:;NTFS;32,21;18,66;57,94%;13,55;42,06%
14.08.2009;db01.ko.loc;E:;NTFS;32,21;13,46;41,78%;18,75;58,22%
14.08.2009;db02.ko.loc;C:;NTFS;16,10;9,52;59,13%;6,58;40,87%
14.08.2009;db02.ko.loc;D:;NTFS;10,73;1,48;13,83%;9,25;86,17%
14.08.2009;db02.ko.loc;E:;NTFS;26,84;0,92;3,43%;25,92;96,57%
14.08.2009;db02.ko.loc;F:;NTFS;80,53;0,55;0,68%;79,98;99,32%

Ausgelesen wird Datum, Host, LW, free (freier Platz), freeP (Prozentanteil des freien Platzes)

Wie du siehst viele Werte mit Komma. Wenn ein batch nur ganze Zahlen vergleichen kann, werden dann bei den GB das Komma und die Stellen dahinter einfach ignoriert? Da funktioniert es nämlich.

Falls das nicht geht mit % wie könnte ich das dann umgehen? Auf die Stellen hinter dem Komma soll es mir ja nicht drauf ankommen. Wenn aus 23,99% 23 wird und ich das dann vergleichen kann ist das auch ok, ins Protokoll wird dann ja trotzdem der genaue Wert geschrieben.

Gruß Joni
Bitte warten ..
Mitglied: bastla
14.08.2009 um 16:42 Uhr
Hallo joni2000de!

Versuch es damit:
01.
setlocal enabledelayedexpansion 
02.
set "Vergleichswert1=%date%" 
03.
::Angabe des Prozentwertes * 100 
04.
set /a "Vergleichswert2=500" 
05.
 
06.
for /f "usebackq tokens=1,2,3,8,9 delims=;" %%a in ("%Auslesewert%") do ( 
07.
    if "%%a" EQU "%Vergleichswert1%" ( 
08.
        set "Frei=%%e" 
09.
        set "Frei=!Frei:%%=!" 
10.
        set /a "Frei=!Frei:,=!" 
11.
        if !Frei! LSS %Vergleichswert2% >>%Protokolldatei %echo %%a %%b %%c %%d %%e 
12.
13.
)
Grüße
bastla
Bitte warten ..
Mitglied: joni2000de
14.08.2009 um 17:01 Uhr
Hallo bastla,

funktioniert tadellos, genau so wie ich es wollte. Nur ein Problem, ich kann dem nur teilweise folgen. Falls du Zeit und Lust hast wäre ich für eine Info zum Code noch dankbar. Ich will ja auch was lernen und nicht nur abschreiben

Jetzt bin ich meinem Ziel auf jeden Fall schon ein großes Stück näher.

Gruß Joni
Bitte warten ..
Mitglied: bastla
14.08.2009 um 17:13 Uhr
Hallo joni2000de!

Da, wie Biber es schon beschrieben hat, ein Vergleich mit Zahlenwerten nur beschränkt möglich ist, wird einfach der jeweilige Prozentwert in einen "brauchbaren" Wertebereich gebracht, indem
  • in Zeile 8 eine "gewöhnliche" Variable %Frei% erzeugt wird (mit den Laufvariablen, wie zB %%e, sind die folgenden Schritte nicht möglich),
  • in Zeile 9 alle (auch wenn's nur eines sein sollte ) enthaltenen Prozentzeichen aus %Frei% durch Nichts ersetzt werden (wie immer innerhalb eines Batches müssen dazu die Prozentzeichen doppelt angeschrieben werden, siehe zB auch %%e),
  • in Zeile 10 das Selbe mit dem Komma gemacht und gleich ein numerischer Wert (durch das "/a") erzeugt wird und
  • in Zeile 11 schließlich der gewünschte (numerische) Vergleich stattfindet.

Zu erwähnen wäre nur noch "setlocal enabledelayedexpansion": Dadurch wird es möglich, innerhalb der Schleife bereits auf die neuen (geänderten) Werte der Variablen %Frei% zuzugreifen - allerdings muss dazu diese Variable !Frei! geschrieben werden.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
14.08.2009 um 17:13 Uhr
So, Joni2000de,

dann auch noch meine Variante, der Vollständigkeit halber.

01.
set "Vergleichswert1=%date%" 
02.
:: Vergleichswert belasse ich in dem Ur-Format "5", aber ohne %-Zeichen. 
03.
set /a "Vergleichswert2=5" 
04.
 
05.
for /f "usebackq tokens=1,2,3,8,9 delims=;" %%a in ("%Auslesewert%") do ( 
06.
   for /f "delims=,%" %%x in ("%%e") 
07.
    if "%%a" EQU "%Vergleichswert1%" ( 
08.
        if "%%x"  LSS "%Vergleichswert2%" >>%Protokolldatei %echo %%a %%b %%c %%d %%e 
09.
10.
))
Is' n bisschen schlanker, aber dafür ungetestet.

Grüße und schönes & baldiges Wochenende an Euch beide
Biber



[Edit]..es mag ja etwas geben, das schlanker ist als bastla, aber niemand überholt schneller... [/Edit]
Bitte warten ..
Mitglied: bastla
14.08.2009 um 17:15 Uhr
@Biber
Ist natürlich die schönere Lösung, aber "schlanker" hätte eigentlich ohnehin nicht zu mir gepasst ...

Getestet sähe es dann etwa so aus:
01.
set "Vergleichswert1=%date%" 
02.
:: Vergleichswert belasse ich in dem Ur-Format "5", aber ohne %-Zeichen. 
03.
set /a "Vergleichswert2=5" 
04.
 
05.
for /f "usebackq tokens=1,2,3,8,9 delims=;" %%a in ("%Auslesewert%") do ( 
06.
    if "%%a" EQU "%Vergleichswert1%" ( 
07.
        for /f "delims=,%%" %%x in ("%%e") do ( 
08.
            if %%x LSS %Vergleichswert2% echo %%a %%b %%c %%d %%e 
09.
10.
11.
)
Schönes Wochenende
bastla
Bitte warten ..
Mitglied: joni2000de
14.08.2009 um 17:38 Uhr
Hallo ihr beiden,

da habe ich heute mal wieder mächtig was dazu gelernt!

Dank eurer Hilfe kann ich mich jetzt beruhigt aufs Bike setzen statt vor den PC

Schöne Grüße
Joni
Bitte warten ..
Mitglied: pieh-ejdsch
15.08.2009 um 05:13 Uhr
hallo Biber,

Du bringst mich da ausm Konzept - Irgendwie ;
[OT]
ich bin ja immer, für noch was fürs Variablentut, zu haben
da hatte ich an folgendes gedacht:

* Die CMD kann auch nichts mit Zahlen größer 2.147.483.647 anfangen. Darübergehende Zahlen also von 2.147.483.648 bis zur Zahl 4.294.967.294 werden in die Numerische Variable als Negative Zahl von -2.147.483.648 bis -2 festgelegt. Ab der Zahl 4.294.967.294 gibt Dir die CMD eine Fehlermeldung aus. Für die Nagativen Zahlen gilt der Satz entsprechend mit Umgekehrter Bedeutung.
[/OT]
und da behaupte sag ich einfach mal das LSS noch richtig vergleicht und zwar wenn die erste Vergleichszahl egal wie groß und die zweite Vergleichszahl höchstens 2.147.483.647 ist.
Und die restlichen VergleichsOP bei beiden Vergleichszahlen bis zu der (2 hoch 31) -1 korrekt arbeiten.
ist zur lesbarkeit mit T-punkten versehen...

Gruß Phil
Bitte warten ..
Mitglied: Biber
15.08.2009 um 08:41 Uhr
Moin PH,

klar, Du hast vollkommen Recht.
Da war ich gestern gerade mal im ganz falschen Film - hat vermutlich etwas mit Freitag nachmittag zu tun.

Richtig (und für diesen Thread relevant) war das "CMD.exe kann nur ganzzahlig rechnen".

Vollkommen Quark war die von mir angeführte unsigned smallint -Restriktion von 0...32767.
Die gilt am CMD bei der dynamischen %random%-Variablen.

Rechnen kann die CMD.exe wie von Dir gepostet bis (2 hoch 31)-1.

Danke für die Richtigstellung.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Werte vergleichen die nicht 100 Prozent gleich sind

Frage von functionstrutBatch & Shell4 Kommentare

Hallo, gibt es eine Möglichkeit Ordnernamen oder einfach generell Texte oder Werte zu vergleichen auch wenn sie nicht 100%ig ...

Batch & Shell

Zwei Werte vergleichen in einer Batch-Datei

gelöst Frage von PatrickHeissi10Batch & Shell1 Kommentar

Ich möchte die beiden Variablen %eins% und %zwei% vergleichen haben diese den gleichen Wert haben-> goto einszwei Danke

Microsoft Office

Excel Werte vergleichen

Frage von 103148Microsoft Office5 Kommentare

Hallo, ich habe eine Liste ( ca. 200 Einträge ) mit Kistengröße wie folgt: Länge, Breite, Höhe daneben wird ...

Microsoft Office

Werte in Spalten vergleichen und einsetzen

gelöst Frage von Inge88Microsoft Office4 Kommentare

Halihalo, ich bin neu hier und versuche eine Lösung zu finden, bzw. kompetente Excel-Kenner: Ich habe mehrere Spalten (A, ...

Neue Wissensbeiträge
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 12 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 18 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server25 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

SAN, NAS, DAS
Qnap TS-453S Pro - Anbindung Active Directory
Frage von JuckieSAN, NAS, DAS13 Kommentare

Hallo zusammen, ich habe hier eine Qnap TS-453S Pro die sich mal so absolut gar nicht in das Active ...