Ich möchte die Größe der Unterordner in einem Ordner sehen, ähnlich wie bei einem Linux- du -sh
Befehl. Wie kann ich Verzeichnisse und ihre Größe in der Eingabeaufforderung auflisten?
Antwort1
Probieren Sie dieFestplattennutzungDienstprogramm von Sysinternals. Insbesondere du -l 1
sollte es die Größe jedes Unterverzeichnisses des aktuellen Verzeichnisses anzeigen. Für weitere Informationen führen Sie es du
ohne Parameter aus.
Wenn PowerShell in Ordnung ist, versuchen Sie Folgendes:
Get-ChildItem |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
$_.Name + ": " + (
Get-ChildItem $_ -Recurse |
Measure-Object Length -Sum -ErrorAction SilentlyContinue
).Sum
}
Die Größen sind in Bytes angegeben. Um sie in einer größeren Einheit wie MB zu formatieren, versuchen Sie Folgendes (komprimiert auf eine Zeile):
Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.Name + ": " + "{0:N2}" -f ((Get-ChildItem $_ -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) + " MB" }
Weitere Informationen finden Sie unterdieser Artikel bei Technet.
Wenn Sie eine flexiblere Formatierung der Größen wünschen (Auswahl von kB/MB/GB/usw. basierend auf der tatsächlichen Größe), siehediese Frage und ihre Antworten.
Ich glaube nicht, dass es möglich ist, das Gewünschte über die normale Befehlszeile und mit nur wenigen einfachen Befehlen zu erreichen. Siehedieses Skript als Beispiel(ich werde es hier nicht kopieren, da ich nicht glaube, dass dieser Ansatz es wert ist, weiterverfolgt zu werden, es sei denn, PowerShell ist nicht verfügbar und Dienstprogramme von Drittanbietern sind nicht akzeptabel.)
Antwort2
Ich habe keine Erfahrung mit du
Linux. Aber unter Windows dir /s
liste ich alle Ordner und Unterordner zusammen mit der Dateigröße auf.
Antwort3
Dies ist eine Modifikation zuIndreks Antwort. Ich habe Folgendes hinzugefügt:
- rekursives Weitergehen in Unterverzeichnisse ermöglicht
- eine Größenschwelle hinzugefügt, um kleinere Verzeichnisse auszuschließen
- Verzeichnisnamen durch ihren relativen Pfad vom aktuellen Verzeichnis ersetzt
- sortierte Ergebnisse nach Pfad (ich fand das bequemer, als sie nach Größe zu sortieren, wenn sie bereits nach Größe gefiltert sind)
- einige Formatierungen hinzugefügt, um die Ergebnisse lesbarer zu machen
$minsizeMB
Legen Sie also $maxdepth
die gewünschten Werte fest und führen Sie das Skript aus.
$minsizeMB = 100;
$maxdepth = 5;
Get-ChildItem -depth $maxdepth -Recurse |
Where-Object { $_.PSIsContainer } |
Select-Object FullName |
Sort-Object FullName |
ForEach-Object {
$directory = Get-Item $_.FullName;
$path = Resolve-Path -Relative $directory.FullName ;
$size = ((Get-ChildItem $directory -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) ;
if ($size -ge $minsizeMB) { "{0,-90}: {1:N2} MB" -f ($path, $size) }
}