0
バッチに問題があります。 ディレクトリのサイズをバッチテストし、大きすぎる場合は最も古いファイルを削除します。windowsバッチ変数のサイズ最大
バッチ:
@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
場合は$最大= 85899345920
それは(80GiB)okです
が、$ maxのは= 204010946560
はそれがerease指示されたサイズよりも多くの(190GiB)
それはそれがそれを修正する方法を知っているのでしょうか?
2^31 = 2147483648 制限付き2GiB なぜそれが制限付きで動作するのですか?80 GiB – ChriGon
使用している**文字列**が2^31を超えているため、バッチは**文字列比較**に切り替わりますモードを選択し、左から右の文字を比較します。すべてのバッチ変数は文字列です。 'set/a'は文字列を数値に変換し、計算して文字列に変換します。同様に、 '=='以外の比較演算子で 'if'を実行すると、文字列から数値への変換が行われます。どちらかの側が範囲内の数値に変換できない場合、比較は生の文字列に対して実行されます。 – Magoo
あなたの答えをありがとう、今私はよく理解しています。 – ChriGon