Come posso controllare la dimensione di una cartella dalla riga di comando di Windows?


36

Voglio usare la riga di comando di Windows per calcolare la dimensione di tutti i file in una cartella e sottocartella. Normalmente farei questo facendo clic con il tasto destro sulla cartella e facendo clic su "Proprietà", ma voglio essere in grado di farlo dalla riga di comando.

Quale comando posso usare?

Risposte:


33

Ti consigliamo di utilizzarlo in dir /a/smodo che includa tutti i file, inclusi i file di sistema e nascosti. Questo ti darà la dimensione totale che desideri.


Mostrami come l'output del tuo comando mi dia la dimensione totale della directory. Modifica la tua risposta per includerla. Eliminerò i miei commenti e annullerò il mio voto negativo.
dal

2
@ user1167442 Chiaramente non l'hai provato. L'output include le stesse dimensioni esatte fornite dalle proprietà di Explorer.
DavidPostill

1
@DavidPostill - hai ragione. Mi vergogno vergognosamente. Invertirò il downvote. Detto questo, non sono ancora troppo appassionato di questa soluzione: preferirei qualcosa di un po 'più veloce che non richiede l'output di tutte le altre cose, ma funziona. Ho sbagliato. - Ah no, ha vinto: non mi permetta di invertire il mio voto negativo. Non appena avrò la reputazione per farlo, lo annullerò.
fatto l'

1
Ha funzionato - downvote rimosso -)
dgo

1
@QHarr Sì, vai avanti e pubblica una domanda e scriverò una risposta per te. In questo modo, sarà di aiuto per tutti essere ricercati da tutti.
RockPaperLizard

13

Puoi usare PowerShell!

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

Questo ricorre attraverso l'intera directory corrente (ignorando le directory che non possono essere inserite) e riassume le dimensioni di ciascun file. Quindi stampa la dimensione totale in byte.

One-liner compatto:

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

Sulla mia macchina, questo sembra leggermente più veloce di un dir /s /a, poiché non stampa le informazioni di ogni oggetto sullo schermo.

Per eseguirlo da un normale prompt dei comandi:

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

Vorrei passare più tempo con PowerShell. Non mi piace mai usarlo per qualche motivo - anche se è super utile per molte cose
do

Ottima soluzione - anche molto veloce!
TrojanName

7

Non esiste tale comando incorporato in DOS o Windows Command Line. Su Linux, c'è il comando du( D isk U sage).

La linea di strumenti Sysinternals di Microsoft ha uno strumento che è approssimativamente equivalente a quello dusu Linux. Si chiama anche du. ;)


1
du -sh <directory>è il mio andare su Linux (o windows w / du via git) per mostrare un riepilogo leggibile dall'uomo delle dimensioni della directory.
kavun,

Grazie, è esattamente quello di cui avevo bisogno. Man mano che i dischi diventano più grandi, è necessario sempre più tempo fare clic con il pulsante destro del mouse sulle proprietà per ottenere le dimensioni dei file e il risultato non può essere selezionato e copiato in calc per garantire che la suddivisione su più dischi esterni abbia scritto tutti i file nella cartella di origine. Ho messo che alla fine di un batch di robocopy convogliato su un file di testo, quindi quando il batch termina ho una metrica di file / cartella / dimensione totale che può essere copiata / incollata in calc per garantire che i file e i byte siano i uguale alla fonte.
Michael Stimson,

2

La dimensione della cartella può essere calcolata con il seguente script batch:

@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

Come eseguirlo su Windows 7?
klm123,

questo non funzionerà se la dimensione totale è superiore a 2 GB a causa del limite di aritmetica in cmd
phuclv

... che in questi giorni è un limite piuttosto serio!
rossmcm,


1

dir /s Elencherà le dimensioni di tutti i file e i file in tutte le sottocartelle


1

Mi rendo conto che questa domanda ha richiesto l'analisi della dimensione del file utilizzando CMD line. Ma se sei aperto all'utilizzo PowerQuery (Excel add-in, versions 2010+), puoi creare un'analisi della dimensione del file piuttosto convincente.

Lo script seguente può essere incollato in una query vuota; L'unica cosa che devi fare è aggiungere un parametro chiamato "paramRootFolderSearch" quindi aggiungere il tuo valore, ad esempio "C: \ Users \ bl0040 \ Dropbox \". Ho usato questo come guida: MSSQLTips: recupera le dimensioni dei file dal file system usando Power Query .

Questa query mi ha fornito i dati per creare una tabella pivot ( [Folder Root]> [Folder Parent (1-2)], [Name]) e sono stato in grado di identificare alcuni file che ho potuto eliminare, liberando molto spazio nella mia directory.

Ecco lo script M per 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)"

Folder File Sizes_xlsx.png

inserisci qui la descrizione dell'immagine

Folder File Sizes_xlsx2.png

inserisci qui la descrizione dell'immagine


0

Basta aprire Power Shell e du -sh <directory>non è necessario installare terze parti o sistemi interni. All'interno di Power-shell puoi eseguire alcuni semplici comandi come Linux come i comandi ls o du, alcuni degli switch non funzioneranno come ls -altfaranno errori poiché PowerShell non sa cosa sia -alt ...


3
Quale versione di PowerShell stai usando? E sei sicuro di non aver installato Sysinternals? Il comando "du" non sembra essere integrato in nessun sistema a cui ho accesso. Anche qualche collegamento alla documentazione sarebbe utile.
anlag

Sono sull'ultimo canale di insider veloce di Windows 10 e non c'è assolutamente alcun ducomando disponibile
phuclv l'

-2

Il comando "dir" fornisce le dimensioni del file, la data e l'ora dell'ultima modifica della directory corrente. Per prima cosa prova a spostarti nella directory che desideri esaminare la dimensione dell'uso del cdcomando, quindi usa il dircomando.

C:\>dir 

Elenca le dimensioni del file, la data e l'ora dell'ultima modifica di tutti i file e le directory nella directory in cui ci si trova attualmente, in ordine alfabetico.


3
Anche questa è una cattiva risposta. Questo produrrà la dimensione combinata di tutti i file nella directory corrente. Tuttavia non genererà la dimensione di alcuna directory nella directory corrente. Questo semplicemente non fa ciò che chiede l'operazione.
dal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.