Datei mit bestimmter Grösse leeren
Hallo Community
Ich habe mir eine Batch erstellt, welche eine Datei nach einer gewisssen Grösse löschen soll. Irgendwie sehe ich da nicht durch.
Die Batch Datei sieht folgendermassen aus:
Wenn ich im cmd "set" eingebe sehe ich folgende Variablen
logsize=11846613498
logsizemax=11846613497
also müsse doch, falls die logsize kleiner gleich ist den Wert der Maximalgrösse müsste hier die Datei gelöscht werden
Leider funktioniert diese Abfrage nicht.
Kann mir jemand mit diesem Problem weiterhelfen?
Ich habe mir eine Batch erstellt, welche eine Datei nach einer gewisssen Grösse löschen soll. Irgendwie sehe ich da nicht durch.
Die Batch Datei sieht folgendermassen aus:
@echo off
set datei=catalina_rl.out
set logpath=C:\NetIQ\idm\apps\tomcat\logs\
set logsizemax=11846613497
:: Wert in Bytes: 10000000 = 10 Mb
for /f "tokens=1-3" %%i in ('dir "%logpath%%datei%" /-C /S ^|find "File(s)" ^|find "bytes"') do set logsize=%%k
if %logsize% LEQ %logsizemax% (
echo "Dateigroesse der %Datei% nicht erreicht"
) ELSE (
echo >C:\NetIQ\idm\apps\tomcat\logs\%datei%
)
Wenn ich im cmd "set" eingebe sehe ich folgende Variablen
logsize=11846613498
logsizemax=11846613497
also müsse doch, falls die logsize kleiner gleich ist den Wert der Maximalgrösse müsste hier die Datei gelöscht werden
Leider funktioniert diese Abfrage nicht.
Kann mir jemand mit diesem Problem weiterhelfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 617990
Url: https://administrator.de/forum/datei-mit-bestimmter-groesse-leeren-617990.html
Ausgedruckt am: 07.04.2025 um 01:04 Uhr
6 Kommentare
Neuester Kommentar
Hi,
Kein Wunder, denn (mit den obigen Werten) gilt: logsize = logiszemax + 1 => logsize > logsizemax
Entweder umschreiben (bspw. if %logsizemax% LEQ %logsize% [...]) oder logsizemax auf bspw. 11846613499 setzen.
Kannst natürlich auch mal in der Anwendung schauene, ob nicht ein logrotate o.ä. möglich ist.
Gruß
cykes
Wenn ich im cmd "set" eingebe sehe ich folgende Variablen
logsize=11846613498
logsizemax=11846613497
also müsse doch, falls die logsize kleiner gleich ist den Wert der Maximalgrösse müsste hier die Datei gelöscht werden
Leider funktioniert diese Abfrage nicht.
logsize=11846613498
logsizemax=11846613497
also müsse doch, falls die logsize kleiner gleich ist den Wert der Maximalgrösse müsste hier die Datei gelöscht werden
Leider funktioniert diese Abfrage nicht.
Kein Wunder, denn (mit den obigen Werten) gilt: logsize = logiszemax + 1 => logsize > logsizemax
Entweder umschreiben (bspw. if %logsizemax% LEQ %logsize% [...]) oder logsizemax auf bspw. 11846613499 setzen.
Kannst natürlich auch mal in der Anwendung schauene, ob nicht ein logrotate o.ä. möglich ist.
Gruß
cykes
Ergänzend:
Ja, Batch kann auch numerisch vergleichen. Aber nur innerhalb dessen, was die CMD als numerischen Wert erkennt. Und das ist eine 32 Bit breite vorzeichenbehaftete Ganzzahl. Anders gesagt, die größte Zahl die die CMD kennt ist 2147483647.
Im zweiten Vergleich ist jeweils die führende 1 abgeschnitten um in den 32 Bit Bereich zu kommen. Ergebnis:
Steffen
Ja, Batch kann auch numerisch vergleichen. Aber nur innerhalb dessen, was die CMD als numerischen Wert erkennt. Und das ist eine 32 Bit breite vorzeichenbehaftete Ganzzahl. Anders gesagt, die größte Zahl die die CMD kennt ist 2147483647.
@echo off &setlocal
if 11846613498 gtr 11846613497 (echo erste Zahl ist groesser.) else echo nope
if 1846613498 gtr 1846613497 (echo erste Zahl ist groesser.) else echo nope
pause
nope
erste Zahl ist groesser.
Drücken Sie eine beliebige Taste . . .
Ja, zu groß um numerisch verglichen zu werden. Wenn du bei Batch bleiben willst/musst, dann geht das nur über einen gezielten Workaround per String. Dazu musst du aber sicherstellen, dass die Stringlängen immer gleich sind, ansonsten wäre "2" größer als "10" da das Zeichen 2 größer als das Zeichen 1 ist.
Ungetestet:
Steffen
Ungetestet:
@echo off &setlocal
set "datei=catalina_rl.out"
set "logpath=C:\NetIQ\idm\apps\tomcat\logs\"
set "logsizemax=00000000011846613497"
set "zeros=00000000000000000000"
for %%i in ("%logpath%%datei%") do set "logsize=%zeros%%%~zi"
set "logsize=%logsize:~-20%"
if "%logsize%" LEQ "%logsizemax%" (
echo "Dateigroesse der %Datei% nicht erreicht"
) ELSE (
>"%logpath%%datei%" type nul
)