batch if Vergleich eines Prozent-Wertes
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 122759
Url: https://administrator.de/forum/batch-if-vergleich-eines-prozent-wertes-122759.html
Ausgedruckt am: 07.04.2025 um 17:04 Uhr
14 Kommentare
Neuester Kommentar
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.
[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
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.
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%
)
)
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
Hallo joni2000de!
Versuch es damit:
Grüße
bastla
Versuch es damit:
setlocal enabledelayedexpansion
set "Vergleichswert1=%date%"
::Angabe des Prozentwertes * 100
set /a "Vergleichswert2=500"
for /f "usebackq tokens=1,2,3,8,9 delims=;" %%a in ("%Auslesewert%") do (
if "%%a" EQU "%Vergleichswert1%" (
set "Frei=%%e"
set "Frei=!Frei:%%=!"
set /a "Frei=!Frei:,=!"
if !Frei! LSS %Vergleichswert2% >>%Protokolldatei %echo %%a %%b %%c %%d %%e
)
)
bastla
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
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
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
So, Joni2000de,
dann auch noch meine Variante, der Vollständigkeit halber.
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]
dann auch noch meine Variante, der Vollständigkeit halber.
set "Vergleichswert1=%date%"
:: Vergleichswert belasse ich in dem Ur-Format "5", aber ohne %-Zeichen.
set /a "Vergleichswert2=5"
for /f "usebackq tokens=1,2,3,8,9 delims=;" %%a in ("%Auslesewert%") do (
for /f "delims=,%" %%x in ("%%e")
if "%%a" EQU "%Vergleichswert1%" (
if "%%x" LSS "%Vergleichswert2%" >>%Protokolldatei %echo %%a %%b %%c %%d %%e
)
))
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...
@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:
Schönes Wochenende
bastla
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:
set "Vergleichswert1=%date%"
:: Vergleichswert belasse ich in dem Ur-Format "5", aber ohne %-Zeichen.
set /a "Vergleichswert2=5"
for /f "usebackq tokens=1,2,3,8,9 delims=;" %%a in ("%Auslesewert%") do (
if "%%a" EQU "%Vergleichswert1%" (
for /f "delims=,%%" %%x in ("%%e") do (
if %%x LSS %Vergleichswert2% echo %%a %%b %%c %%d %%e
)
)
)
bastla
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:
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
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
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
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
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