2016-10-27 2 views
0


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?

Antwort

2

Das Maximum für eine numerische Variable im Stapel ist 2^31.

Versuchen in Mib Berechnung oder 2 Variablen (Mb und Bytes)


Aber da Ihre Variablen beide Einzelsaiten sind, die Sie wissen, numerisch zu sein, versuchen Sie dann

set "$$max=000000000000000000000%$max%" 
set "$$NbBytes=000000000000000000%$NbBytes%" 
if %$$NbBytes:~-18% GTR %$$max:~-18% (

That Ist die Variable mit einer großen Anzahl von 0 s vorangestellt, dann vergleichen Sie die letzten n (Ich wählte 18) Zeichen der resultierenden Zeichenfolge.

+0

2^31 = 2147483648 , dass mit der Grenze 2GiB , warum es mit einem Limit 80 GiB – ChriGon

+2

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

+0

danke für deine antwort, jetzt verstehe ich besser. – ChriGon