Sie können Größen einfach rekursiv addieren (das Folgende ist eine Batch-Datei):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
Dies hat jedoch mehrere Probleme, da cmd
es auf 32-Bit-Ganzzahlarithmetik mit Vorzeichen beschränkt ist. So wird es Größen über 2 GiB falsch 1 bekommen . Darüber hinaus werden Symlinks und Junctions wahrscheinlich mehrmals gezählt, sodass es sich bestenfalls um eine Obergrenze handelt, nicht um die wahre Größe (dieses Problem tritt jedoch bei jedem Tool auf).
Eine Alternative ist PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
oder kürzer:
ls -r | measure -sum Length
Wenn Sie es schöner wollen:
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" }
}
Sie können dies direkt verwenden von cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 Ich habe irgendwo eine teilweise fertiggestellte Bignum-Bibliothek in Batch-Dateien, die zumindest eine Ganzzahladdition mit beliebiger Genauigkeit richtig macht. Ich sollte es wirklich veröffentlichen, denke ich :-)
du
gibt es die Verzeichnisgröße an, aber alles, was es tut, ist, den Baum zu durchlaufen und zusammenzufassen. Etwas, das sich in einer Pipeline wie hier sehr elegant ausdrücken lässt :-). Daher suche ich für PowerShell normalerweise nach Möglichkeiten, wie Sie das übergeordnete Ziel in geeignete Operationen auf niedrigerer Ebene zerlegen können.folder\*
funktioniert bei mir nicht Die Größe des Ordners, den ich an der Stelle abgelegt habe, zeigt 0 Bytes. Gibt es eine Lösung?Dafür gibt es ein integriertes Windows-Tool :
Dadurch werden viele unnötige Informationen gedruckt, aber das Ende ist die Ordnergröße wie folgt:
Wenn Sie versteckte Ordner einschließen müssen, fügen Sie hinzu
/a
.quelle
Ich empfehle, das Dienstprogramm DU von der von Microsoft bereitgestellten Sysinternals Suite unter diesem Link http://technet.microsoft.com/en-us/sysinternals/bb896651 herunterzuladen
Werfen Sie einen Blick auf die anderen Dienstprogramme, während Sie gerade dabei sind. Sie sind ein Lebensretter für jeden Windows Professional
quelle
\\live.sysinternals.com
falls dies noch vorhanden ist). Ich stimme jedoch voll und ganz zu, dass alle sysinternalen Tools standardmäßig enthalten sein sollten. Obwohl PowerShell für viele Zwecke ein durchaus würdiger Ersatz ist.Einzeiler:
Gleich, aber nur Powershell:
Dies sollte zu folgendem Ergebnis führen:
quelle
0.00 C:\Windows
kann ich dies für alle Ordner optimieren, versucht bereits als Admin ausgeführtft
(Format-Table
). Sie könnenfl
stattdessen versuchen (Format-List
)Wenn Sie Git auf Ihrem Computer installiert haben (was immer häufiger vorkommt), öffnen Sie einfach MINGW32 und geben Sie Folgendes ein:
du folder
quelle
du -h -d 1 folder | sort -h
wenn Sie eine lesbare Größe, nur eine Ebene von Unterverzeichnissen und eine Sortierung nach Größe wünschen.Ich empfehle die Verwendung des Dienstprogramms https://github.com/aleksaan/diskusage . Sehr einfach und hilfreich. Und sehr schnell.
Geben Sie einfach eine Befehlsshell ein
und erhalten Sie eine Liste der Ordner nach Größe sortiert
Dieses Beispiel wurde mit 272 ms auf der Festplatte ausgeführt.
Sie können die Tiefe der zu analysierenden Unterordner erhöhen, zum Beispiel:
und erhalten Sie Größen nicht nur für ausgewählte Ordner, sondern auch für die Unterordner
* 3,5 TB auf dem Server wurden für 3 Minuten und 12 Minuten gescannt
quelle
Hier kommt ein Powershell-Code, den ich in Listengröße und Dateizahl für alle Ordner im aktuellen Verzeichnis schreibe. Sie können es nach Bedarf wiederverwenden oder ändern.
quelle
$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}} }
Dies liefert Objekte (mehr Powershell-ish), 'FileCount' und 'Size' sind Ganzzahlen (damit Sie sie später bei Bedarf verarbeiten können) und 'Size' in Bytes, aber Sie können sie leicht in konvertieren GB (oder das gewünschte Gerät) mit$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}} }
Dieser Code wird getestet. Sie können es erneut überprüfen.
quelle
Ich denke, dies würde nur funktionieren, wenn das Verzeichnis ziemlich statisch ist und sich sein Inhalt zwischen der Ausführung der beiden dir-Befehle nicht ändert. Vielleicht eine Möglichkeit, dies in einem Befehl zu kombinieren, um dies zu vermeiden, aber dies funktionierte für meinen Zweck (ich wollte nicht die vollständige Auflistung; nur die Zusammenfassung).
GetDirSummary.bat Skript:
Verwendung:
GetDirSummary.bat c: \ temp
Ausgabe:
quelle
Ich habe
du.exe
mit meiner Git-Distribution bekommen. Ein anderer Ort könnte Microsoft oder Unxutils sein .Sobald du du.exe auf deinem Weg hast. Hier ist dein
fileSizes.bat
:-)➪
quelle
Ich denke, Ihre einzige Option ist diruse (eine stark unterstützte Lösung von Drittanbietern):
Ruft die Datei- / Verzeichnisgröße über die Befehlszeile ab
Die Windows-CLI ist leider recht restriktiv. Sie können auch Cygwin installieren, was im Vergleich zu cmd ein Traum ist. Dadurch erhalten Sie Zugriff auf das portierte Unix-Tool du, das die Grundlage für Diruse unter Windows bildet.
Entschuldigung, ich konnte Ihre Fragen nicht direkt mit einem Befehl beantworten, den Sie auf dem nativen CLI ausführen können.
quelle
du
dann ist Cygwin viel übertrieben. Gehen Sie einfach mit GnuWin32 .:: Holen Sie sich eine Anzahl von Zeilen, die Dir-Befehle zurückgeben (/ -c, um Zahlentrennzeichen zu entfernen:.,) ["Tokens = 3", um nur die dritte Spalte jeder Zeile in Dir zu betrachten]
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1
Nummer der vorletzten Zeile, wobei die Anzahl der Bytes der Summe der Dateien ist:
Holen Sie sich schließlich die Anzahl der Bytes in der vorletzten Zeile - 3. Spalte:
Da die Wortsuche nicht verwendet wird, treten keine Sprachprobleme auf.
Einschränkungen:
quelle
Versuchen:
Ändern Sie C: \ Programme in einen beliebigen Ordner und ändern Sie% A in %% A, wenn Sie es in einer Batchdatei verwenden
Es gibt die Größe des gesamten Ordners zurück, einschließlich Unterordner sowie versteckter Dateien und Systemdateien, und funktioniert mit Ordnern über 2 GB
Es wird auf den Bildschirm geschrieben, daher müssen Sie eine Zwischendatei verwenden, wenn Sie das nicht möchten.
quelle
Das folgende Skript kann verwendet werden, um die Größe jeder Datei in einem bestimmten Ordner abzurufen und zu akkumulieren.
Der Ordnerpfad
%folder%
kann als Argument für dieses Skript angegeben werden (%1
).Letztendlich werden die Ergebnisse im Parameter gehalten
%filesize%
Hinweis: Die Methode
calcAccSize
kann auch den Inhalt des Ordners drucken (im obigen Beispiel kommentiert).quelle
Hier finden Sie eine Lösung für beide Anforderungen in der Art und Weise, wie Sie sie ursprünglich angefordert haben. Es gibt die Dateigröße für die menschliche Lesbarkeit ohne die Einschränkungen der Dateigröße, die jeder erfährt. Kompatibel mit Win Vista oder neuer. XP nur verfügbar, wenn Robocopy installiert ist. Legen Sie einfach einen Ordner in dieser Batch-Datei ab oder verwenden Sie die unten beschriebene bessere Methode.
Um diese Batch-Datei bequem verwenden zu können, legen Sie sie bequem in Ihrem SendTo-Ordner ab. Auf diese Weise können Sie mit der rechten Maustaste auf einen Ordner oder eine Auswahl von Ordnern klicken, auf die Option SendTo klicken und dann diese Batchdatei auswählen.
Um den SendTo-Ordner auf Ihrem Computer zu finden, öffnen Sie am einfachsten cmd und kopieren Sie es unverändert in diese Zeile.
quelle
Ich habe ein ähnliches Problem gelöst. Einige der Methoden auf dieser Seite sind langsam und andere in mehrsprachigen Umgebungen problematisch (alle nehmen Englisch an). Ich habe eine einfache Problemumgehung mit vbscript in cmd gefunden. Es ist in W2012R2 und W7 getestet.
Es setzt die Umgebungsvariable S_. Sie können natürlich die letzte Zeile ändern, um das Ergebnis direkt auf z
Sie können es als Unterprogramm oder als eigenständiges cmd verwenden. Parameter ist der Name des getesteten Ordners, der in Anführungszeichen geschlossen wird.
quelle
Die einfachste Methode, um nur die Gesamtgröße zu erhalten, ist Powershell, ist jedoch durch die Tatsache begrenzt, dass Pfadnamen, die länger als 260 Zeichen sind, nicht in der Gesamtgröße enthalten sind
quelle