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.
Si vous exécutez "dir c:\
", la dernière ligne vous donnera l’espace disque disponible.
Edit: .__ Meilleure solution: "fsutil volume diskfree c:
"
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.
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%
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:
for
pour détecter la ligne explicitement plutôt que de vous appuyer sur le paramètre bytesfree
pour chaque ligne).tokens=
pour obtenir un autre mot).,
(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.
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}'
En utilisant cette commande, vous pouvez trouver toutes les partitions, leur taille et leur espace libre: wmic logicaldisk get size, freespace, caption
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)
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).
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.