Pregunta Espacio libre en un shell CMD


¿Hay alguna forma de obtener la cantidad de espacio de disco libre de un disco o una carpeta en un CMD? sin tener que instalar algunas aplicaciones de terceros?

Tengo una CMD que copia un archivo grande en un directorio determinado y podría, por supuesto, usar el error de retorno del comando de copia, pero luego tengo que esperar el momento se necesita copiar el archivo (por ejemplo ... a eso, entonces el disco está lleno y la operación de copia falla).

Me gustaría saber antes de comenzar la copia si es que hay alguna idea. Probé la utilidad DU.EXE desde Sysinternals, pero eso muestra solo espacio ocupado.


74
2017-11-16 11:04


origen


Respuestas:


Si tu corres "dir c:\", la última línea le dará el espacio libre en el disco.

Editar: Mejor solución: "fsutil volume diskfree c:"


96
2017-11-16 11:09



Una posible solución:

dir|find "bytes free"

un más "solución avanzada", para Windows Xp y más allá:

wmic /node:"%COMPUTERNAME%" LogicalDisk Where DriveType="3" Get DeviceID,FreeSpace|find /I "c:"

los Línea de comando de instrumentación de administración de Windows (WMIC) herramienta (Wmic.exe) puede reunir grandes cantidades de información acerca de un Windows Server 2003 y Windows XP o Vista. La herramienta accede al hardware subyacente mediante Windows Management Instrumentation (WMI). No para Windows 2000


42
2017-11-16 11:11



Puede evitar las comas usando / -C en el comando DIR.

FOR /F "usebackq tokens=3" %%s IN (`DIR C:\ /-C /-O /W`) DO (
    SET FREE_SPACE=%%s
)
ECHO FREE_SPACE is %FREE_SPACE%

Si desea comparar el espacio disponible con el espacio necesario, puede hacer algo como lo siguiente. Especifiqué el número con el separador de miles, luego los quité. Es difícil comprender el número sin comas. El SET / A es agradable, pero deja de funcionar con números grandes.

SET EXITCODE=0
SET NEEDED=100,000,000
SET NEEDED=%NEEDED:,=%

IF %FREE_SPACE% LSS %NEEDED% (
    ECHO Not enough.
    SET EXITCODE=1
)
EXIT /B %EXITCODE%

6
2018-06-06 23:10



La siguiente secuencia de comandos le dará bytes libres en la unidad:

@setlocal enableextensions enabledelayedexpansion
@echo off
for /f "tokens=3" %%a in ('dir c:\') do (
    set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo %bytesfree%
endlocal && set bytesfree=%bytesfree%

Tenga en cuenta que esto depende de la salida de su dir comando, que necesita la última línea que contiene el espacio libre del formato 24 Dir(s) 34,071,691,264 bytes free. Específicamente:

  • debe ser la última línea (o puede modificar el for bucle para detectar la línea explícitamente en lugar de depender de la configuración bytesfree para cada línea).
  • el espacio libre debe ser la tercera "palabra" (o puede cambiar el tokens= poco para obtener una palabra diferente).
  • separadores de miles son , personaje (o puede cambiar la sustitución de coma a otra cosa).

No contamina el espacio de nombre de su entorno, configurando solo el bytesfree variable a la salida Si tu dir la salida es diferente (por ej., configuración de idioma o configuración de idioma diferente), deberá ajustar la secuencia de comandos.


5
2017-09-05 07:26



df.exe

Muestra todos tus discos; capacidad total, usada y libre. Puede modificar la salida mediante varias opciones de línea de comandos.

Puedes obtenerlo de http://www.paulsadowski.com/WSH/cmdprogs.htm, http://unxutils.sourceforge.net/ o en otra parte. Es un unix-util estándar como du.

df -h mostrará todos los discos usados ​​y disponibles de su disco. Por ejemplo:

M:\>df -h
Filesystem      Size  Used Avail Use% Mounted on
C:/cygwin/bin   932G   78G  855G   9% /usr/bin
C:/cygwin/lib   932G   78G  855G   9% /usr/lib
C:/cygwin       932G   78G  855G   9% /
C:              932G   78G  855G   9% /cygdrive/c
E:              1.9T  1.3T  621G  67% /cygdrive/e
F:              1.9T  201G  1.7T  11% /cygdrive/f
H:              1.5T  524G  938G  36% /cygdrive/h
M:              1.5T  524G  938G  36% /cygdrive/m
P:               98G   67G   31G  69% /cygdrive/p
R:               98G   14G   84G  15% /cygdrive/r

Cygwin está disponible de forma gratuita desde: https://www.cygwin.com/ Agrega muchas herramientas potentes al símbolo del sistema. Para obtener solo el espacio disponible en la unidad M (asignada en las ventanas a una unidad compartida), se puede ingresar:

M:\>df -h | grep M: | awk '{print $4}'

4
2017-11-16 13:02



¿Es cscript una aplicación de terceros? Sugiero tratar Microsoft Scripting, donde puedes usar un lenguaje de programación (JScript, VBS) para verificar cosas como Lista de espacio en disco disponible.

La infraestructura de scripting está presente en todas las versiones actuales de Windows (incluido 2008).


0
2017-11-16 11:19



Utilizando paxdiablo excelente solución Escribí un script por lotes un poco más sofisticado, que utiliza la letra de unidad como el argumento entrante y comprueba si la unidad existe de una manera difícil (pero no de belleza):

@echo off
setlocal enableextensions enabledelayedexpansion
set chkfile=drivechk.tmp
if "%1" == "" goto :usage
set drive=%1
set drive=%drive:\=%
set drive=%drive::=%
dir %drive%:>nul 2>%chkfile%
for %%? in (%chkfile%) do (
  set chksize=%%~z?
)
if %chksize% neq 0 (
  more %chkfile%
  del %chkfile%
  goto :eof
)
del %chkfile%
for /f "tokens=3" %%a in ('dir %drive%:\') do (
  set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo %bytesfree% byte(s) free on volume %drive%:
endlocal

goto :eof
:usage
  echo.
  echo   usage: freedisk ^<driveletter^> (eg.: freedisk c)

nota 1: puede escribir una letra simple (por ejemplo, x) o puede usar el formato x: o x: \ como letra de unidad en el argumento

note2: script mostrará stderr de% chkfile% solo si el tamaño es mayor que 0

nota 3: guardé este script como freedisk.cmd (ver uso)


0
2018-02-03 13:47