2010-03-29 8 views
4

Est-il possible de trouver par programme l'espace libre disponible dans les lecteurs mappés?comment trouver le pourcentage d'espace libre pour les lecteurs mappés?

Comment trouver le pourcentage d'espace libre dans votre lecteur en utilisant ms-dos.
Il peut être facile de trouver l'espace libre pour un lecteur sur votre disque dur, mais j'ai besoin de trouver l'espace libre des lecteurs mappés.

J'ai cartographié certains serveurs de fichiers dans mes systèmes.

Il est possible de voir cela dans Poste de travail, mais comment le montrer dans une invite de commande?

+0

Vous ne pouvez pas vraiment parler de ms-dos lorsque vous êtes sur une fenêtre> 98. – ChristopheD

+0

Oui, veuillez spécifier votre plate-forme. Et que voulez-vous dire exactement par "Mapped" lecteurs? –

+0

Balises modifiées et question nettoyée, en supposant que l'invite de commande Windows. –

Répondre

9

(Extrait d'une ancienne réponse de mes plus FAUTIVE Server)

La meilleure façon d'obtenir de manière fiable à l'espace libre sur le disque en utilisant WMI. Lorsque vous essayez d'analyser la sortie de dir vous obtenez toutes sortes de problèmes amusants, à tout le moins avec des versions de Windows dans d'autres langues. Vous pouvez utiliser wmic pour interroger l'espace libre sur un disque:

wmic logicaldisk where "DeviceID='C:'" get FreeSpace 

Ceci affichera quelque chose comme

FreeSpace 
197890965504 

Vous pouvez forcer cela en une seule ligne en ajoutant le commutateur /format:value:

> wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value 

FreeSpace=197890965504 

Il y a quelques lignes vides là, mais (environ trois ou quatre) qui ne se prêtent pas bien pour le traitement. Heureusement, la commande for peut les supprimer pour nous quand nous ne tokenizing:

for /f "usebackq delims== tokens=2" %x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%x 

La bonne chose est que puisque nous n'utilisons le deuxième jeton toutes les lignes vides (qui ne disposent pas d'un second jeton) Inscrivez-vous ignoré.

Souvenez-vous de doubler les signes % lorsque vous utilisez ce dans un fichier batch:

for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%x 

Vous pouvez maintenant utiliser l'espace libre qui est stocké dans la variable d'environnement %FreeSpace%.


Obtenir des pourcentages maintenant est un peu délicat car les fichiers batch ne prennent en charge que les entiers 32 bits pour le calcul. Cependant, vous n'avez probablement pas besoin de calculer cela pour l'octet; Je pense que mégaoctets sont assez:

for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%x 
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get Size /format:value`) do set Size=%%x 
set FreeMB=%FreeSpace:~0,-6% 
set SizeMB=%Size:~0,-6% 
set /a Percentage=100 * FreeMB/SizeMB 
echo C: is %Percentage% % free 

Cela devrait fonctionner à moins que vos volumes obtiennent plus de 20 TiB.

+0

gr8 merci u .. en fait, la réponse est 7,79 il affiche comme 7 peut-il être affiché dans le flotteur? – Arunachalam

+0

@aru: Pas en tant que tel, non. cmd ne prend en charge que les calculs d'entiers. Vous pouvez multiplier par 10000 au lieu de 100 et insérer un point décimal manuellement, cependant. Cependant, la taille libre ne doit pas dépasser 200 GiB. – Joey

0

Vous avez besoin de GetDiskFreeSpaceEx. Fonctionne avec les lecteurs, les lecteurs mappés, etc.

ULARGE_INTEGER free; 
ULARGE_INTEGER total; 
ULARGE_INTEGER totalFree; 
BOOL   ok; 

ok = GetDiskSpaceFreeEx(path, &free, &total, &totalFree); 
if (ok) 
{ 
// do your sums here, then printf the result 
} 
+0

Ligne de commande, scripting ... Je doute que cela signifie C. – Joey

0

Vous pouvez le faire dans Windows moderne très facilement en utilisant PowerShell. Cette cmdlet renverra une belle table contenant vos lecteurs et quelques informations sur leur espace.

get-psdrive | Where Free* 

Name   Used (GB)  Free (GB) Provider  Root                 CurrentLocation 
----   ---------  --------- --------  ----                 --------------- 
C     101.65   65.59 FileSystem C:\                 WINDOWS\system32 
D     801.55  129.96 FileSystem D:\ 
R     443.17  2351.22 FileSystem R:\ 
X     119.28  104.29 FileSystem X:\ 

Probablement le moyen le plus simple et le plus court d'obtenir ce que vous cherchez. N'oubliez pas de lancer PowerShell, pas cmd.exe, pour exécuter ces cmds.

get-psdrive | Où gratuit *

Questions connexes