Si può solo aggiungere fino dimensioni in modo ricorsivo (Il seguente è un file batch):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
Tuttavia, questo ha diversi problemi a causa cmd
è limitata a numero intero con segno aritmetico a 32 bit. Quindi otterrà dimensioni superiori a 2 GiB errate . Inoltre conterrà probabilmente più collegamenti simbolici e giunzioni più volte, quindi è al massimo un limite superiore, non la dimensione reale (tuttavia si avrà il problema con qualsiasi strumento).
Un'alternativa è PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
o più corto:
ls -r | measure -s Length
se lo vuoi più bella:
switch((ls -r|measure -s 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" }
}
È possibile utilizzare questo direttamente da cmd
:
powershell -noprofile -command "ls -r|measure -s Length"
Io ho una libreria bignum parzialmente rifinito in file batch da qualche parte almeno, viene aggiunta interi precisione arbitraria destra. Dovrei davvero rilasciarlo, immagino :-)
+1 Stavo vagando nel get-help * Uscita di trovare qualcosa di simile. – Steve
Steve, ai miei occhi PowerShell è molto più Unix-y di Unix in quanto i comandi principali sono in realtà ortogonali. In Unix 'du' fornisce la dimensione della directory, ma tutto ciò che sta facendo è camminare sull'albero e riassumere. Qualcosa che può essere espresso molto elegantemente in una pipeline come qui :-). Quindi per PowerShell di solito cerco come si può scomporre l'obiettivo di alto livello in opportune operazioni di livello inferiore. – Joey
Sembra non restituire il risultato corrente per la home directory di un utente. In un caso, se faccio clic destro su una cartella principale e ottengo proprietà, vedo ~ 200 MB. Se faccio ls -r