114 votes

Espace libre dans un shell CMD

Existe-t-il un moyen d'obtenir la quantité d'espace disque libre d'un disque ou d'un dossier dans un CMD sans avoir à installer des applications tierces ?

J'ai un CMD qui copie un gros fichier dans un répertoire donné et je pourrais bien sûr utiliser le retour du niveau d'erreur de la commande de copie, mais je dois alors attendre le temps qu'il le temps qu'il faut pour copier le fichier (par exemple...jusqu'à ce que le disque soit plein et que l'opération de copie échoue).

J'aimerais savoir avant de commencer la copie si c'est une idée quelconque. J'ai essayé l'utilitaire DU.EXE de Sysinternals, mais il ne montre que l'espace occupé.

6voto

paxdiablo Points 341644

Le script suivant vous donnera les octets libres sur le disque :

@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%

Notez que cela dépend de la sortie de votre dir qui a besoin de la dernière ligne contenant l'espace libre du format 24 Dir(s) 34,071,691,264 bytes free . Plus précisément :

  • il doit s'agir de la dernière ligne (ou vous pouvez modifier le fichier for pour détecter la ligne de manière explicite plutôt que de s'appuyer sur la définition de bytesfree pour chaque ligne).
  • l'espace libre doit être le troisième "mot" (ou vous pouvez modifier l'option tokens= pour obtenir un autre mot).
  • Les milliers de séparateurs sont les , (ou vous pouvez changer la substitution de la virgule à quelque chose d'autre).

Il ne pollue pas l'espace de noms de votre environnement, ne définissant que l'attribut bytesfree à la sortie. Si votre dir est différente (par exemple, des paramètres locaux ou linguistiques différents), vous devrez ajuster le script.

1voto

Zsolt Hidasi Points 31

Utilisation de paxdiablo excellente solution, j'ai écrit un batch script un peu plus sophistiqué, qui utilise la lettre du lecteur comme argument entrant et vérifie si le lecteur existe d'une manière délicate (mais pas belle) :

@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)

note1 : vous pouvez taper une simple lettre (ex. x) ou utiliser le format x : ou x:\ comme lettre de lecteur dans l'argument

note2 : script affichera stderr de %chkfile% uniquement si la taille est supérieure à 0.

note3 : J'ai enregistré ce script comme freedisk.cmd (voir utilisation)

1voto

Je fais une variation pour générer ceci à partir de script :

volume C: - 49 GB total space / 29512314880 byte(s) free

J'utilise Disque dur pour obtenir cette information.

@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%
echo list volume | diskpart | find /I " %drive% " >%chkfile%
for /f "tokens=6" %%a in ('type %chkfile%' ) do (
    set dsksz=%%a
)
for /f "tokens=7" %%a in ('type %chkfile%' ) do (
    set dskunit=%%a
)
del %chkfile%
for /f "tokens=3" %%a in ('dir %drive%:\') do (
  set bytesfree=%%a
)
set bytesfree=%bytesfree:,=%
echo volume %drive%: - %dsksz% %dskunit% total space / %bytesfree% byte(s) free
endlocal

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

0voto

gimel Points 30150

Est-ce que cscript est une application tierce ? Je suggère d'essayer Microsoft Scripting où vous pouvez utiliser un langage de programmation (JScript, VBS) pour vérifier des choses comme Liste de l'espace disque disponible .

L'infrastructure de script est présente sur toutes les versions actuelles de Windows (y compris 2008).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X