Comment puis-je vérifier la taille d'un dossier à partir de la ligne de commande Windows?


36

Je souhaite utiliser la ligne de commande Windows pour calculer la taille de tous les fichiers d'un dossier et d'un sous-dossier. Je le ferais normalement en faisant un clic droit sur le dossier et en cliquant sur "Propriétés" mais je veux pouvoir le faire sur la ligne de commande.

Quelle commande puis-je utiliser?

Réponses:


33

Vous voudrez l'utiliser dir /a/spour qu'il comprenne tous les fichiers, y compris les fichiers système et cachés. Cela vous donnera la taille totale que vous désirez.


Montrez-moi comment la sortie de votre commande me donne la taille totale du répertoire. Modifiez votre réponse pour l'inclure. Je vais supprimer mes commentaires et annuler mon vote négatif.
dgo

2
@ user1167442 Vous ne l'avez manifestement pas essayé. La sortie comprend exactement la même taille que celle des propriétés de l'explorateur.
DavidPostill

1
@DavidPostill - vous avez raison. J'ai honte de ma gueule. Je vais inverser le downvote. Cela dit, je ne suis toujours pas trop intéressé par cette solution - je préférerais quelque chose d'un peu plus rapide qui ne nécessite pas la sortie de toutes les autres choses, mais cela fonctionne. Je me suis trompé. - Ahh les noix - ça a gagné; laissez-moi inverser mon downvote. Dès que j'aurai la réputation de le faire, je la renverserai.
dgo

1
Cela a fonctionné - downvote supprimé -)
dgo

1
@QHarr Oui, allez-y et posez une question et je rédigerai une réponse pour vous. De cette façon, cela aidera tout le monde en étant consultable par tous.
RockPaperLizard

13

Vous pouvez utiliser PowerShell!

$totalsize = [long]0
Get-ChildItem -File -Recurse -Force -ErrorAction SilentlyContinue | % {$totalsize += $_.Length}
$totalsize

Cela revient dans tout le répertoire courant (en ignorant les répertoires qui ne peuvent pas être entrés) et résume les tailles de chaque fichier. Il imprime ensuite la taille totale en octets.

Doublure compacte:

$totalsize=[long]0;gci -File -r -fo -ea Silent|%{$totalsize+=$_.Length};$totalsize

Sur ma machine, cela semble légèrement plus rapide que a dir /s /a, car il n'imprime pas les informations de chaque objet à l'écran.

Pour l'exécuter à partir d'une invite de commande normale:

powershell -command "$totalsize=[long]0;gci -File -r -fo -ea Silent|%{$totalsize+=$_.Length};$totalsize"

J'aimerais avoir passé plus de temps avec PowerShell. Je n'aime jamais l'utiliser pour une raison quelconque - même s'il est super utile pour beaucoup de choses
dgo

Excellente solution - très rapide aussi!
TrojanName

7

Aucune commande de ce type n'est intégrée au DOS ou à la ligne de commande Windows. Sous Linux, il y a la commande du( D isk U sage).

La gamme d'outils Sysinternals de Microsoft dispose d'un outil à peu près équivalent à duLinux. Ça s'appelle aussi du. ;)


1
du -sh <directory>est mon rendez-vous sur Linux (ou windows w / du via git) pour afficher un résumé lisible par l'homme de la taille du répertoire.
kavun

Merci, c'est exactement ce dont j'avais besoin. Au fur et à mesure que les disques grossissent, il faut de plus en plus de temps pour faire un clic droit sur les propriétés pour obtenir la taille des fichiers et le résultat ne peut pas être sélectionné et copié dans calc pour garantir que le fractionnement sur plusieurs disques externes a écrit chaque fichier dans le dossier source. Je l'ai mis à la fin d'un lot de robocopy dirigé vers un fichier texte, puis à la fin du lot, j'ai une métrique totale de fichier / dossier / taille qui peut être copiée / collée dans calc pour garantir que les fichiers et les octets sont les même que la source.
Michael Stimson

2

La taille du dossier peut être calculée avec le script de commandes suivant:

@echo off
setlocal enabledelayedexpansion

set size=0
for /f "tokens=*" %%x in ('dir /s /a /b %1') do set /a size+=%%~zx
echo.!size!

endlocal

Comment exécuter cela sur Windows 7?
klm123

cela ne fonctionnera pas si la taille totale est supérieure à 2 Go en raison de la limite de l'arithmétique en cmd
phuclv

... ce qui de nos jours est une limitation assez sérieuse!
rossmcm


1

dir /s Répertorie les tailles de tous les fichiers et les fichiers dans tous les sous-dossiers


1

Je me rends compte que cette question demandait une analyse de la taille du fichier en utilisant CMD line. Mais si vous êtes ouvert à l'utilisation, PowerQuery (Excel add-in, versions 2010+)vous pouvez créer une analyse de taille de fichier assez convaincante.

Le script ci-dessous peut être collé dans une requête vierge; La seule chose que vous devrez faire est d'ajouter un paramètre nommé "paramRootFolderSearch" puis ajoutez votre valeur, comme "C: \ Users \ bl0040 \ Dropbox \". J'ai utilisé cela comme guide: MSSQLTips: récupérer des tailles de fichier à partir du système de fichiers à l'aide de Power Query .

Cette requête m'a fourni les données pour créer un tableau croisé dynamique ( [Folder Root]> [Folder Parent (1-2)], [Name]), et j'ai pu identifier quelques fichiers que j'ai pu supprimer, ce qui a dégagé beaucoup d'espace dans mon répertoire.

Voici le script M pour PowerQuery :

let
// Parmameters:
    valueRootFolderSearch = paramRootFolderSearch,
    lenRootFolderSearch = Text.Length(paramRootFolderSearch),
//

    Source = Folder.Files(paramRootFolderSearch),
    #"Removed Other Columns" = Table.RenameColumns(
Table.SelectColumns(Source,{"Name", "Folder Path", "Attributes"})
,{{"Folder Path", "Folder Path Full"}}),
    #"Expanded Attributes" = Table.ExpandRecordColumn(#"Removed Other Columns", "Attributes", {"Content Type", "Kind", "Size"}, {"Content Type", "Kind", "Size"}),
    #"fx_Size(KB)" = Table.AddColumn(#"Expanded Attributes", "Size(KB)", each [Size]/1024),
    #"fx_Size(MB)" = Table.AddColumn(#"fx_Size(KB)", "Size(MB)", each [Size]/1048576),
    #"fx_Size(GB)" = Table.AddColumn(#"fx_Size(MB)", "Size(GB)", each [Size]/1073741824),
    fx_FolderRoot = Table.AddColumn(#"fx_Size(GB)", "Folder Root", each valueRootFolderSearch),
    helper_LenFolderPathFull = Table.AddColumn(fx_FolderRoot, "LenFolderPathFull", each Text.Length([Folder Path Full])),
    fx_FolderDepth = Table.AddColumn(helper_LenFolderPathFull, "Folder Depth", each Text.End([Folder Path Full], [LenFolderPathFull]-lenRootFolderSearch+1)),
    #"helperList_ListFoldersDepth-Top2" = Table.AddColumn(fx_FolderDepth, "tmp_ListFoldersDepth", each List.Skip(
  List.FirstN(
    List.RemoveNulls(
      Text.Split([Folder Depth],"\")
    )
  ,3)
,1)),
    #"ListFoldersDepth-Top2" = Table.TransformColumns(#"helperList_ListFoldersDepth-Top2", 
{"tmp_ListFoldersDepth", each "\" & Text.Combine(List.Transform(_, Text.From), "\") & "\"
, type text}),
    #"Select Needed Columns" = Table.SelectColumns(#"ListFoldersDepth-Top2",{"Name", "Folder Root", "Folder Depth", "tmp_ListFoldersDepth", "Content Type", "Kind", "Size", "Size(KB)", "Size(MB)", "Size(GB)"}),
    #"rename_FoldersParent(1-2)" = Table.RenameColumns(#"Select Needed Columns",{{"tmp_ListFoldersDepth", "Folders Parent (1-2)"}})
in
    #"rename_FoldersParent(1-2)"

Fichier dossier Sizes_xlsx.png

entrez la description de l'image ici

Folder File Sizes_xlsx2.png

entrez la description de l'image ici


0

Il suffit d'ouvrir le Power Shell et de ne du -sh <directory>pas avoir besoin d'installer des systèmes tiers ou des systèmes internes. Dans Power-shell, vous pouvez exécuter des commandes simples comme Linux comme les commandes ls ou du, certains commutateurs ne fonctionneront pas comme une ls -alterreur car powershell ne sait pas ce qu'est le -alt ...


3
Quelle version de PowerShell utilisez-vous? Et êtes-vous sûr que Sysinternals n'est pas installé? La commande "du" ne semble pas être intégrée à tous les systèmes auxquels j'ai accès. Un lien vers la documentation serait également utile.
anlag

Je suis sur la dernière chaîne d'initiés rapide de Windows 10 et il n'y a absolument aucune ducommande disponible
phuclv

-2

La commande "dir" fournit la taille du fichier, la date et l'heure de la dernière modification du répertoire courant. Essayez d'abord de vous déplacer vers le répertoire dans lequel vous souhaitez voir la taille de l'utilisation de la cdcommande, puis utilisez la dircommande.

C:\>dir 

Répertorie la taille du fichier, la date et l'heure de la dernière modification de tous les fichiers et répertoires du répertoire dans lequel vous vous trouvez actuellement, par ordre alphabétique.


3
C'est aussi une mauvaise réponse. Cela produira la taille combinée de tous les fichiers du répertoire actuel. Il ne produira cependant pas la taille des répertoires du répertoire courant. Cela ne fait tout simplement pas ce que l'op demande.
dgo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.