web-dev-qa-db-fra.com

Espace libre dans un shell CMD

Existe-t-il un moyen d’obtenir la quantité d’espace disque disponible sur un disque ou un dossier dans un CMD Sans devoir installer des applications tierces?

J'ai un CMD qui copie un gros fichier dans un répertoire donné et peut bien sûr utiliser Le retour de errorlevel à partir de la commande copy, mais je dois attendre le tempsit prend pour copier le fichier (par exemple ..pour que le disque soit plein et que l'opération de copie échoue).

Je voudrais savoir avant de commencer la copie si c'est une idée du tout. Essayé l'utilitaire DU.EXE de Sysinternals, mais ce spectacle occupait uniquement de l'espace.

81
Peter Lundkvist

Si vous exécutez "dir c:\", la dernière ligne vous donnera l’espace disque disponible.

Edit: .__ Meilleure solution: "fsutil volume diskfree c:"

99
Nico

Une solution possible:

dir|find "bytes free"

une plus " solution avancée ", pour Windows Xp et au-delà:

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

L'outil de ligne de commande Windows Management Instrumentation (WMIC) (Wmic.exe) Peut collecter de grandes quantités d'informations sur Windows Server 2003 ainsi que sur Windows XP ou Vista. L'outil accède au matériel sous-jacent à l'aide de Windows Management Instrumentation (WMI). Pas pour Windows 2000.

44
VonC

Vous pouvez éviter les virgules en utilisant/-C dans la commande 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 vous souhaitez comparer l'espace disponible à l'espace nécessaire, vous pouvez procéder comme suit. J'ai spécifié le nombre avec séparateur de milliers, puis les ai supprimés. Il est difficile de saisir le numéro sans virgule. Le SET/A est Nice, mais il cesse de fonctionner avec un grand nombre.

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
lit

Le script suivant vous donnera des octets gratuits sur le lecteur:

@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 commande dir, qui nécessite 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 la boucle for pour détecter la ligne explicitement plutôt que de vous appuyer sur le paramètre bytesfree pour chaque ligne).
  • l'espace libre doit être le troisième "mot" (ou vous pouvez modifier le bit tokens= pour obtenir un autre mot).
  • les séparateurs de milliers sont le caractère , (ou vous pouvez changer la substitution de virgule à autre chose).

Il ne pollue pas votre espace de noms d'environnement, définissant uniquement la variable bytesfree à la sortie. Si votre sortie dir est différente (par exemple, des paramètres régionaux ou de langue différents), vous devrez ajuster le script.

5
paxdiablo

df.exe

Affiche tous vos disques; capacité totale, utilisée et disponible. Vous pouvez modifier le résultat à l’aide de diverses options de ligne de commande.

Vous pouvez l'obtenir de http://www.paulsadowski.com/WSH/cmdprogs.htm , http://unxutils.sourceforge.net/ ou ailleurs. C'est un standard unix-util comme du.

df -h affichera tout l'espace disque utilisé et disponible de votre lecteur. Par exemple:

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 gratuitement à l’adresse: https://www.cygwin.com/ .__ Il ajoute de nombreux outils puissants à la commande Invite. Pour obtenir uniquement l'espace disponible sur le lecteur M (comme mappé dans Windows sur un lecteur partagé), vous pouvez entrer:

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

En utilisant cette commande, vous pouvez trouver toutes les partitions, leur taille et leur espace libre: wmic logicaldisk get size, freespace, caption

1
Dewsri De Mel

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

@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 lettre simple (par exemple x) ou utiliser le format x: ou x:\comme lettre de lecteur dans l'argument

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

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

0
Zsolt Hidasi

Cscript est-il une application tierce? Je suggère d'essayer Microsoft Scripting , où vous pouvez utiliser un langage de programmation (JScript, VBS) pour vérifier des éléments tels que Lister l'espace disque disponible .

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

0
gimel

Sous Windows 10, les opérations de copie et xcopy échouent immédiatement si un fichier trop grand est copié pour le répertoire cible. Il n’est donc plus nécessaire de vérifier l’espace disque disponible avant de lancer la copie.

0
Christoph Bimminger