Sie haben 2 Probleme mit Ihrem Code:
1) IF führt nur einen numerischen Vergleich durch, wenn die Zeichenfolge auf beiden Seiten eine Zahl ergibt. Ihre linke Seite ist numerisch, aber Ihre rechte Seite hat Anführungszeichen, wodurch der gesamte Vergleich mithilfe der Zeichenfolgensemantik durchgeführt werden muss. Numerische Ziffern sind immer höher als ein Anführungszeichen, daher wird immer TRUE gemeldet.
Wie Austin in seiner Antwort vorschlägt, ergibt das Entfernen der Anführungszeichen in Ihrem Fall anscheinend die richtige Antwort. Das ist aber nicht die ganze Geschichte! In Wirklichkeit wird geprüft, ob der freie Speicherplatz größer oder gleich 2147483647 ist.
2) Windows-Batch-Nummern (cmd.exe) sind auf eine vorzeichenbehaftete 32-Bit-Genauigkeit beschränkt, was einem Maximalwert von 2 GB -1 Byte (2147483647) entspricht. Die IF-Anweisung weist ein seltsames (möglicherweise unglückliches) Verhalten auf, bei dem jede Zahl größer als 2147483647 als gleich 2147483647 behandelt wird. Sie können Ihre Technik also nicht verwenden, um freien Speicherplatz auf Werte größer als 2147483647 zu testen.
Weitere Informationen finden Sie unter https://stackoverflow.com/q/9116365/1012053 .
In der Antwort des Links wird eine Technik beschrieben, mit der Sie große Zahlen testen können. Sie müssen beide Seiten der Bedingung auf die gleiche Breite belassen und einen Zeichenfolgenvergleich erzwingen.
Im Folgenden wird beispielsweise getestet, ob der freie Speicherplatz> = 4294967296 (4 GB) ist.
@echo off
setlocal
set "pad=000000000000000"
set "NeededSpace=%pad%4294967296"
for /f "delims== tokens=2" %%x in (
'wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value'
) do for %%y in (%%x) do set "FreeSpace=%pad%%%y"
if "%FreeSpace:~-15%" geq "%NeededSpace:~-15%" echo Drive has at least 4 GB free space.