Vous pouvez simplement additionner les tailles de manière récursive (ce qui suit est un fichier de commandes):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
Cependant, cela pose plusieurs problèmes car il cmd
est limité à l'arithmétique d'entiers signés 32 bits. Ainsi, les tailles supérieures à 2 Gio seront fausses 1 . De plus, il comptera probablement plusieurs fois les liens symboliques et les jonctions, donc c'est au mieux une limite supérieure, pas la taille réelle (vous aurez ce problème avec n'importe quel outil, cependant).
Une alternative est PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
ou plus court:
ls -r | measure -sum Length
Si vous le voulez plus joli:
switch((ls -r|measure -sum Length).Sum) {
{$_ -gt 1GB} {
'{0:0.0} GiB' -f ($_/1GB)
break
}
{$_ -gt 1MB} {
'{0:0.0} MiB' -f ($_/1MB)
break
}
{$_ -gt 1KB} {
'{0:0.0} KiB' -f ($_/1KB)
break
}
default { "$_ bytes" }
}
Vous pouvez l'utiliser directement depuis cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 J'ai une bibliothèque bignum partiellement terminée dans des fichiers batch quelque part qui obtient au moins une addition d'entiers de précision arbitraire. Je devrais vraiment le sortir, je suppose :-)
du
donne la taille du répertoire, mais tout ce qu'il fait est de parcourir l'arborescence et de résumer. Quelque chose qui peut être très élégamment exprimé dans un pipeline comme ici :-). Donc, pour PowerShell, je cherche généralement comment vous pouvez décomposer l'objectif de haut niveau en opérations de niveau inférieur appropriées.folder\*
ne fonctionne pas pour moi la taille du dossier que j'ai mis à la place montre 0 octets, y a-t-il une solution?Il existe un outil Windows intégré pour cela:
Cela imprimera beaucoup d'informations inutiles mais la fin sera la taille du dossier comme ceci:
Si vous devez inclure des dossiers cachés, ajoutez
/a
.la source
Je suggère de télécharger l'utilitaire DU à partir de la suite Sysinternals fournie par Microsoft à ce lien http://technet.microsoft.com/en-us/sysinternals/bb896651
Pendant que vous y êtes, jetez un œil aux autres utilitaires. Ils sauvent la vie de chaque professionnel de Windows
la source
\\live.sysinternals.com
si cela existe toujours). Je suis tout à fait d'accord cependant, que tous les outils sysinternals devraient être inclus par défaut. Bien que pour de nombreuses utilisations, PowerShell soit un remplacement tout à fait valable.Bon mot:
Idem mais Powershell uniquement:
Cela devrait produire le résultat suivant:
la source
0.00 C:\Windows
puis-je optimiser cela pour tous les dossiers, essayé déjà exécuté en tant qu'administrateurft
(Format-Table
) fonctionne. Vous pouvez essayer à lafl
place (Format-List
)Si vous avez installé git sur votre ordinateur (qui devient de plus en plus courant), ouvrez simplement MINGW32 et tapez:
du folder
la source
du -h -d 1 folder | sort -h
si vous souhaitez une taille lisible par l'homme, un niveau de sous-répertoires uniquement et un tri par taille.Je recommande d'utiliser https://github.com/aleksaan/diskusage utilitaire . Très simple et utile. Et très vite.
Tapez simplement un shell de commande
et obtenir la liste des dossiers classés par taille
Cet exemple a été exécuté à 272 ms sur le disque dur.
Vous pouvez augmenter la profondeur des sous-dossiers à analyser, par exemple:
et obtenez des tailles non seulement pour les dossiers sélectionnés, mais également pour ses sous-dossiers
* 3,5 To sur le serveur ont été scannés pendant 3 min 12 s
la source
Voici un code PowerShell que j'écris pour lister la taille et le nombre de fichiers pour tous les dossiers du répertoire courant. N'hésitez pas à réutiliser ou à modifier selon vos besoins.
la source
$FolderList = Get-ChildItem -Directory -Force; $data = foreach ($folder in $FolderList) { set-location $folder.FullName; $size = Get-ChildItem -Recurse -Force | Measure-Object -Sum Length; $size | select @{n="Path"; e={$folder.Fullname}}, @{n="FileCount"; e={$_.count}}, @{n="Size"; e={$_.Sum}} }
Cela fournira des objets (plus Powershell-ish), 'FileCount' et 'Size' sont des entiers (vous pouvez donc les traiter plus tard, si nécessaire), et 'Size' est en octets, mais vous pouvez facilement le convertir en GB (ou l'unité de votre choix) avec$Data.Size / 1GB
.$Data = dir -Directory -Force | %{ $CurrentPath = $_.FullName; Get-ChildItem $CurrentPath -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Sum Length | select @{n="Path"; e={$CurrentPath}}, @{n="FileCount"; e={$_.count}}, @{n="Size"; e={$_.Sum}} }
Ce code est testé. Vous pouvez le vérifier à nouveau.
la source
Je suppose que cela ne fonctionnerait que si le répertoire est assez statique et que son contenu ne change pas entre l'exécution des deux commandes dir. Peut-être un moyen de combiner cela en une seule commande pour éviter cela, mais cela a fonctionné dans mon but (je ne voulais pas la liste complète; juste le résumé).
Script GetDirSummary.bat:
Usage:
GetDirSummary.bat c: \ temp
Production:
la source
J'ai eu
du.exe
ma distribution git. Un autre endroit pourrait être Microsoft ou Unxutils susmentionné .Une fois que vous avez du.exe dans votre chemin. Voici votre
fileSizes.bat
:-)➪
la source
Je pense que votre seule option sera diruse (une solution tierce hautement prise en charge):
Obtenir la taille du fichier / répertoire à partir de la ligne de commande
La CLI Windows est malheureusement assez restrictive, vous pouvez également installer Cygwin qui est un rêve à utiliser par rapport à cmd. Cela vous donnerait accès à l'outil Unix porté du qui est la base de diruse sous Windows.
Désolé, je n'ai pas pu répondre directement à vos questions avec une commande que vous pouvez exécuter sur le cli natif.
la source
du
Cygwin est bien exagéré. Allez simplement avec GnuWin32 .:: Récupère le nombre de lignes renvoyées par les commandes Dir (/ -c pour éliminer les séparateurs de nombres:.,) ["Tokens = 3" pour ne regarder que la troisième colonne de chaque ligne dans Dir]
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1
Numéro de l'avant-dernière ligne, où est le nombre d'octets de la somme des fichiers:
Enfin, récupérez le nombre d'octets dans l'avant-dernière ligne - 3e colonne:
Comme il n'utilise pas de recherche de mots, il n'y aura pas de problèmes de langue.
Limites:
la source
Essayer:
Remplacez C: \ Program Files par le dossier de votre choix et changez% A en %% A si vous l'utilisez dans un fichier batch
Il renvoie la taille de tout le dossier, y compris les sous-dossiers et les fichiers cachés et système, et fonctionne avec les dossiers de plus de 2 Go
Il écrit à l'écran, vous devrez donc utiliser un fichier provisoire si vous ne le souhaitez pas.
la source
Le script suivant peut être utilisé pour récupérer et accumuler la taille de chaque fichier dans un dossier donné.
Le chemin du dossier
%folder%
peut être donné comme argument à ce script (%1
).En fin de compte, les résultats sont conservés dans le paramètre
%filesize%
Remarque: La méthode
calcAccSize
peut également imprimer le contenu du dossier (commenté dans l'exemple ci-dessus)la source
Voici donc une solution pour vos deux demandes de la manière que vous aviez initialement demandée. Cela donnera une taille de fichier de lisibilité humaine sans les limites de taille de fichier que tout le monde connaît. Compatible avec Win Vista ou plus récent. XP uniquement disponible si Robocopy est installé. Déposez simplement un dossier sur ce fichier de commandes ou utilisez la meilleure méthode mentionnée ci-dessous.
Pour pouvoir utiliser ce fichier de commandes, placez-le dans votre dossier SendTo. Cela vous permettra de faire un clic droit sur un dossier ou une sélection de dossiers, de cliquer sur l'option Envoyer à, puis de sélectionner ce fichier de commandes.
Pour trouver le dossier SendTo sur votre ordinateur, le moyen le plus simple est d'ouvrir cmd, puis de copier cette ligne telle quelle.
la source
J'ai résolu un problème similaire. Certaines méthodes de cette page sont lentes et certaines sont problématiques dans un environnement multilingue (toutes supposent l'anglais). J'ai trouvé une solution de contournement simple en utilisant vbscript dans cmd. Il est testé dans W2012R2 et W7.
Il définit la variable d'environnement S_. Vous pouvez, bien sûr, changer la dernière ligne pour afficher directement le résultat par exemple
Vous pouvez l'utiliser comme sous-programme ou comme cmd autonome. Le paramètre est le nom du dossier testé fermé entre guillemets.
la source
La méthode la plus simple pour obtenir uniquement la taille totale est PowerShell, mais elle est toujours limitée par le fait que les noms de chemin de plus de 260 caractères ne sont pas inclus dans le total.
la source