Solución:
Sugiero usar un script de PowerShell para eso.
wmic
devuelve el tamaño en bytes, el lote está limitado a comparaciones de números de enteros de 32 bits con signo, muy por debajo de 100 GB. Primero tendría que truncar el número.
Potencia Shell
if ((Get-WMIObject Win32_Logicaldisk -filter "deviceid='C:'").FreeSpace -gt 100GB){
"yes enough free space"
} else {
"not enough free space"
}
Tengo que ampliar la información anterior sobre la comparación de números en lote.
Si los números están contenidos en cadenas de igual longitud, se pueden comparar válidamente como cadenas.
Una comparación de cadenas tiene lugar carácter por carácter, un espacio inicial / cero es menor que 1.
Por el momento, el tamaño más grande de los discos duros es 10TB = 10995116277760 bytes tomando 14 lugares decimales; el siguiente lote usa 15 lugares para todos los números.
@Echo off
Rem 543210987654321
Set "Blank= "
Set "GB100= 107374182400"
Set "TB_10= 10995116277760"
for /f "tokens=2" %%A in (
'wmic LogicalDisk Get DeviceID^,FreeSpace ^| find /i "C:"'
) Do Set "FreeSpace=%Blank%%%A"
Set "FreeSpace=%FreeSpace:~-15%"
Echo FreeSpace="%FreeSpace%"
Echo 100 GB="%GB100%"
If "%FreeSpace%" gtr "%GB100%" (
Echo yes enough free space
) else (
Echo not enough free space
)
Salida de muestra:
> Check-FreeSpace.cmd
FreeSpace=" 101606346752"
100 GB=" 107374182400"
not enough free space
> Check-FreeSpace.cmd
FreeSpace=" 1181504520192"
100 GB=" 107374182400"
yes enough free space
La forma más sencilla es mirar la última línea de dir
producción
dir /-c /w C: | find "bytes free"
También puede obtener el valor del tamaño directamente al obtener 3rd token en la salida
FOR /F "tokens=3 USEBACKQ" %%F IN (`dir /-c /w C:`) DO set "size=%%F"
echo %size%
Sin embargo, no es confiable ya que la cadena puede ser diferente en otro idioma. Y también tenga en cuenta que a veces tiene mucho espacio libre pero no puede escribir más archivos porque ha alcanzado algunos límites como el tamaño máximo de archivo o la cantidad máxima de archivos en un volumen / directorio …
La forma más correcta es
wmic LogicalDisk where DeviceID='C:' Get FreeSpace /value