Ich habe ein Problem mit meiner Charge. Der Batch-Test die Größe eines Verzeichnisses und wenn es zu groß ist, lösche älteste Datei.Windows Batch Variablengröße max
der Partie:
@echo off
setlocal enabledelayedexpansion
net use T: /d
net use T: \\10.230.78.22\survcam
set dossiure=T:\
set "$max=204010946560"
Echo traitement en cours....
:loop
for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
set $NbBytes=%%a
goto:test
)
:test
If %$NbBytes% GTR %$max% (
for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
set LeVieux="%dossiure%%%a"
Echo Destruction de : [!LeVieux!]
del "!LeVieux!"
goto:wait
)
)
goto:fin
:wait
rem ping localhost -n 1
goto:loop
:fin
net use T: /d
echo fini
Wenn $ max = 85899345920
es in Ordnung ist (80GiB)
aber wenn $ max = 204010946560
es erease viel mehr als die angegebene Größe (190GiB)
es ist wie es verstehen 19Gib Limit jemand weiß, wie man es beheben?
2^31 = 2147483648 , dass mit der Grenze 2GiB , warum es mit einem Limit 80 GiB – ChriGon
arbeiten Da die ** ** Strings Sie verwenden 2^31 überschreiten, Charge ** String-Vergleich schaltet ** Modus und vergleichen Sie Zeichen von links nach rechts. Alle Batch-Variablen sind Strings - 'set/a' konvertiert von string in numerisch, berechnet und konvertiert dann zurück in einen String. Gleichermaßen führt 'if' mit Vergleichsoperatoren, die anders als' == 'von String zu Numerisch konvertiert werden, dann den Vergleich durch. Wenn eine der beiden Seiten nicht in einen numerischen Wert innerhalb eines Bereichs konvertiert werden kann, wird der Vergleich mit der Rohzeichenfolge durchgeführt. – Magoo
danke für deine antwort, jetzt verstehe ich besser. – ChriGon