
74487
20.07.2009, aktualisiert um 08:53:47 Uhr
CMD per Dir Ordnergrößen ermitteln
Hallo liebe Leute,
ich wollte per CMD-Skript bei Windows mit dem Befehl DIR die Unterordner eines Ordners auflisten lassen und deren Größe (von jeden Unterordner seine Größe) auflisten lassen.
Wie mach ich das am besten?
Danke im Voraus.
ich wollte per CMD-Skript bei Windows mit dem Befehl DIR die Unterordner eines Ordners auflisten lassen und deren Größe (von jeden Unterordner seine Größe) auflisten lassen.
Wie mach ich das am besten?
Danke im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120806
Url: https://administrator.de/forum/cmd-per-dir-ordnergroessen-ermitteln-120806.html
Ausgedruckt am: 06.04.2025 um 23:04 Uhr
15 Kommentare
Neuester Kommentar
Wie sieht es mit einem Tool aus! TreeSize ist glaube ich genau das richtige: http://www.chip.de/downloads/TreeSize-Free_13001595.html
Tschau Andreas
Tschau Andreas
@Seardan
Nur als Anmerkung: Besonders übersichtliche Ergebnisse liefert noch nicht einmal die folgende Variante (von der Kommandozeile, als Batch jeweils mit doppelten %-Zeichen):
Grüße
bastla
Nur als Anmerkung: Besonders übersichtliche Ergebnisse liefert noch nicht einmal die folgende Variante (von der Kommandozeile, als Batch jeweils mit doppelten %-Zeichen):
for /d %i in ("D:\Ordner\*.*") do @(for /f "delims=" %a in ('dir "%i"^|findstr "Datei(en)"') do @echo %a %i)
bastla
da hab ich noch etwas genaueres...
die wesentlich besseren Ergebnisse jedes (Unter-)ordners in welchen diese Batch ist und ausgeführt wird - wird die komplette Größe ausgegeben. Das mit der GesamtGrößenzusammenrechnung der Einzelordner bekomme ich aber nicht ganz hin. wundert mich sowieso, das CMD mit mehr als 2Gig rechnet zumal ich Files habe die locker über 6GB gehen.
@bastla die CMD lässt sich also durch den Trick mit der IF Bedingung und der Klammer austricksen und rechnet ohne Probleme mit über 4Gig. Normal setzt die dumme Kuh CMD das ja gleich in negative Zahlen um zwischen 2 und 4 Gig und bei über 4 Gig mekerts rum....das Vieh...
vllt spielt die Variablen-Erweiterung auch noch ne zusätzliche Rolle, was ich aber net glaube.
zum Anzeigen der Größe der der Enthaltenen Unterordner eines Ordners einfach den Ordner auf die Batch ziehen...
Ordnergrößen Anzeigen bat
Gruß Phil
die wesentlich besseren Ergebnisse jedes (Unter-)ordners in welchen diese Batch ist und ausgeführt wird - wird die komplette Größe ausgegeben. Das mit der GesamtGrößenzusammenrechnung der Einzelordner bekomme ich aber nicht ganz hin. wundert mich sowieso, das CMD mit mehr als 2Gig rechnet zumal ich Files habe die locker über 6GB gehen.
@bastla die CMD lässt sich also durch den Trick mit der IF Bedingung und der Klammer austricksen und rechnet ohne Probleme mit über 4Gig. Normal setzt die
vllt spielt die Variablen-Erweiterung auch noch ne zusätzliche Rolle, was ich aber net glaube.
zum Anzeigen der Größe der der Enthaltenen Unterordner eines Ordners einfach den Ordner auf die Batch ziehen...
Ordnergrößen Anzeigen bat
::schnipp------Ordnergroessen Anzeigen.bat
@echo off
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1"
for /d %%i in ("%pfad%*.*") do for /f "tokens=1-3" %%a in ('dir "%%i" /a /s ^|findstr "Datei(en)"') do (set "summ=%%c" & call :zaehl "%%i" )
for /f "tokens=2,3 delims=?=" %%i in ('set..') do echo %%i hat: %%j bytes& set /a folders + = 1
echo %folders% Ordner & pause & goto :eof
:zaehl
if defined "..?%~1" (set /a summend + = %summ:.=%) else set "summend=%summ:.=%"
set "..?%~1=%summend%"
::schnapp------Ordnergroessen Anzeigen.bat
Gruß Phil
@ph
Kurze Anmerkung: Das Eliminieren der Tausendertrennzeichen (=Punkte) aus der Größenangabe kannst Du einsparen, wenn Du den "dir"-Schalter "/-c" verwendest ...
Das Überlisten der 32- bzw 31-Bit-Genauigkeitsgrenze für Berechnungen kann ich allerdings nicht erkennen - für mich sieht es einfach so aus, als würde nur die Gesamtgröße (die letzte Zeile mit "Datei(en)") je Unterverzeichnis gespeichert, aber nicht berechnet (ist allerdings auch schon ziemlich spät heute) ...
Grüße
bastla
Kurze Anmerkung: Das Eliminieren der Tausendertrennzeichen (=Punkte) aus der Größenangabe kannst Du einsparen, wenn Du den "dir"-Schalter "/-c" verwendest ...
Das Überlisten der 32- bzw 31-Bit-Genauigkeitsgrenze für Berechnungen kann ich allerdings nicht erkennen - für mich sieht es einfach so aus, als würde nur die Gesamtgröße (die letzte Zeile mit "Datei(en)") je Unterverzeichnis gespeichert, aber nicht berechnet (ist allerdings auch schon ziemlich spät heute) ...
Grüße
bastla
Ok danke Punkte entfernt.....
manchmal mach ich es doch noch ein bissel umständlich! mrgreen
für den test der Berechnung mit der Genauigkeitsgrenze nimmst Du in
Zeile 08 alles VOR der Klammer AUF und alles NACH der Klammer ZU einschliesslich der Klammern weg.
dann ziehst Du ein Laufwerk oder einen Ordner größer als 2 GB auf die Batch. da kommen nur Werte unterhalb 2 GB bzw MINUS 2GB raus.
Gruß Phil
manchmal mach ich es doch noch ein bissel umständlich! mrgreen
für den test der Berechnung mit der Genauigkeitsgrenze nimmst Du in
Zeile 08 alles VOR der Klammer AUF und alles NACH der Klammer ZU einschliesslich der Klammern weg.
dann ziehst Du ein Laufwerk oder einen Ordner größer als 2 GB auf die Batch. da kommen nur Werte unterhalb 2 GB bzw MINUS 2GB raus.
::schnipp------Ordnergroessen Anzeigen.bat
@echo off
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1"
for /d %%i in ("%pfad%*.*") do for /f "tokens=1-3" %%a in ('dir "%%i" /a /s /-c ^|findstr "Datei(en)"') do (set "summ=%%c" & call :zaehl "%%i" )
for /f "tokens=2,3 delims=?=" %%i in ('set..') do echo %%i hat: %%j bytes& set /a folders + = 1
echo %folders% Ordner& pause & goto :eof
:zaehl
if defined "..?%~1" (set /a summend + = summ) else set "summend=%summ%"
set "..?%~1=%summend%"
::schnapp------Ordnergroessen Anzeigen.bat
Gruß Phil
@ph
Wenn Du allerdings in Zeile 8 den folgenden "else"-Zweig verwendest:
wirst Du sehen, dass immer "else" ausgeführt wird, und damit nur ein "set", aber keine Berechnung, erfolgt - Grund: "if defined" sucht ja nicht nach der Variablen
sondern nach
und kann diese nicht finden - daher "not defined" ...
... bzw anders rum:
zeigt, dass die Variable nur ohne Anführungszeichen gefunden wird, und auch ohne eine Berechnung jeweils die richtigen Ordnergrößen in der Zusammenfassung enthalten sind (da je Unterordner einfach die ausgelesene, vom "dir"-Befehl gelieferte Gesamtsumme, gespeichert wird).
Nixdestotrotz ist natürlich das Zwischenspeichern der Einzelergebnisse in den jeweiligen "Ordnervariablen" eine schöne Lösung
(die allerdings durch ein vorangestelltes "setlocal" vielleicht noch geringfügig zu verbessern wäre).
Grüße
bastla
Wenn Du allerdings in Zeile 8 den folgenden "else"-Zweig verwendest:
... else (set "summend=%summ%" & echo gesetzt: %summ%)
..?Unterordner
"..?Unterordner"
... bzw anders rum:
:zaehl
if defined ..?%~1 set ..?%~1
set "summend=%summ%"
set "..?%~1=%summend%"
Nixdestotrotz ist natürlich das Zwischenspeichern der Einzelergebnisse in den jeweiligen "Ordnervariablen" eine schöne Lösung
Grüße
bastla
naja da habch mich wohl zu früh gefreut. wegen zusammrechnen.
da hab ich wohl wegen der Variable net genau hingeschaut....
ich arbeite noch an einer Art vom zusammenrechnen der Einzeilgrößen mit zerlegen der Zahl. weil ich das selbst auch benötige....
also reicht das auch so
da hab ich wohl wegen der Variable net genau hingeschaut....
ich arbeite noch an einer Art vom zusammenrechnen der Einzeilgrößen mit zerlegen der Zahl. weil ich das selbst auch benötige....
also reicht das auch so
::schnipp------Ordnergroessen Anzeigen.bat
@echo off & setlocal
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1"
if not "%pfad:~-1%" == "\" set "pfad=%pfad%\"
for /d %%i in ("%pfad%*.*") do for /f "tokens=1-3" %%a in ('dir "%%i" /a /s /-c ^|findstr "Datei(en)"') do set "..?%%i=%%c"
for /f "tokens=2,3 delims=?=" %%i in ('set..') do echo %%i hat: %%j bytes& set /a folders + = 1
echo %folders% Ordner& pause & goto :eof
::schnapp------Ordnergroessen Anzeigen.bat
so Jetzt hab ich mal die Berechnung der Gesamtgröße der Einzelnen Ordner zusammengefasst.
dazu musste erst der Größenwert zerlegt werden. somit lassen sich auch Werte bis in den Petabyte bzw bis zum Exabyte zussammenrechnen und darstellen.
Gruß Phil
dazu musste erst der Größenwert zerlegt werden. somit lassen sich auch Werte bis in den Petabyte bzw bis zum Exabyte zussammenrechnen und darstellen.
::schnipp------Ordnergroessen Anzeigen.bat
@echo off & setlocal & set Fkilo=0& title Ordnergroessen
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1"
if not "%pfad:~-1%" == "\" set "pfad=%pfad%\"
for /d %%i in ("%pfad%*.*") do for /f "tokens=1-3" %%a in ('dir "%%i" /a /s /-c ^|findstr "Datei(en)"') do set "..?%%~i=%%c"
for /f "tokens=2,3 delims=?=" %%i in ('set.. 2^>nul') do (echo %%i hat: %%j bytes& set /a folders + = 1 &call :rechner %%j)
if defined folders (echo %folders% Ordner in "%pfad%" haben %Fpeta%%Fgiga%%Fkilo% bytes& pause & goto :eof ) else echo "%pfad%" enthaelt keine Ordner!& pause& goto :eof
:rechner
set /a gignr = 0 , petnr = 0
set alls=%1
if %alls% gtr 999999 (set giga=%alls:~ 0, -6%& set /a gignr + = 1 , kilo = 1%alls:~-6%) else (set /a kilo = %alls:~-6% , giga = 0 , peta = 0 & goto :woutgig )
if %giga% gtr 999999 (set peta=%giga:~ 0, -6%& set /a petnr + = 1 , giga = 1%giga:~-6%) else (set /a giga = %giga:~-6% , peta = 0)
:woutgig
set Falls=%Fpeta%%Fgiga%%Fkilo%
if %Falls% gtr 999999 (set Fgiga=%Falls:~ 0, -6%& set /a Fkilo = 1%Falls:~ -6% + kilo , gignr + = 1) else (set /a Fkilo = %Falls% + kilo , Fgiga = 0 , Fpeta = 0 )
if %Fgiga% gtr 999999 (set Fpeta=%Fgiga:~ 0, -6%& set /a Fgiga = 1%Fgiga:~ -6% + giga - gignr + %Fkilo:~ 0, -6% 2>nul , petnr + = 1) else (set /a Fgiga = %Fgiga% + giga - gignr + %Fkilo:~ 0, -6% 2>nul, Fpeta = 0 )
if %Fpeta% gtr 0 set /a Fpeta = Fpeta + peta - petnr + %Fgiga:~ 0, -6% ,
set Fkilo=%Fkilo:~ -6%
if %Fgiga% == 0 (set "Fgiga=") else set Fgiga=%Fgiga:~ -6%
if %Fpeta% == 0 set "Fpeta="
goto :eof
::schnapp------Ordnergroessen Anzeigen.bat
Gruß Phil
Hallo pieh-ejdsch
dieses script von dir
ist im Prinzip fast das was ich gesucht habe.
Habe gestern einige Stunden versucht es anzupassen leider ohne Erfolg.
Demnach die Frage ist es möglich das Script so umzustellen dass die Dateigröße am Anfang steht also "Dateigröße bytes - Verzeichnis Pfad\Datei"
und das Ganze in eine txt Datei gespeichert wird ?
Noch genialer wäre es natürlich wenn es auch für Verzeichnisse mit Unterverzeichnissen die Unterverzeichnisse haben funktionieren könnte. Dann bräuchte man es nur 1x pro Laufwerk ausführen um sich eine Dateiliste anzeigen zu lassen, die nach Größe sortiert ist. Das wäre das Optimum. Würde mich sehr freuen wenn du dich damit nochmal beschäftigen könntest. Vielen Dank im Vorraus und ein schönes und vor allen Dingen gesundes Wochenende
dieses script von dir
@echo off
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1"
for /d %%i in ("%pfad%*.*") do for /f "tokens=1-3" %%a in ('dir "%%i" /a /s /-c ^|findstr "Datei(en)"') do (set "summ=%%c" & call :zaehl "%%i" )
for /f "tokens=2,3 delims=?=" %%i in ('set..') do echo %%i hat: %%j bytes& set /a folders + = 1
echo %folders% Ordner& pause & goto :eof
:zaehl
if defined "..?%~1" (set /a summend + = summ) else set "summend=%summ%"
set "..?%~1=%summend%"
ist im Prinzip fast das was ich gesucht habe.
Habe gestern einige Stunden versucht es anzupassen leider ohne Erfolg.
Demnach die Frage ist es möglich das Script so umzustellen dass die Dateigröße am Anfang steht also "Dateigröße bytes - Verzeichnis Pfad\Datei"
und das Ganze in eine txt Datei gespeichert wird ?
Noch genialer wäre es natürlich wenn es auch für Verzeichnisse mit Unterverzeichnissen die Unterverzeichnisse haben funktionieren könnte. Dann bräuchte man es nur 1x pro Laufwerk ausführen um sich eine Dateiliste anzeigen zu lassen, die nach Größe sortiert ist. Das wäre das Optimum. Würde mich sehr freuen wenn du dich damit nochmal beschäftigen könntest. Vielen Dank im Vorraus und ein schönes und vor allen Dingen gesundes Wochenende

Ich übernehme ab hier - Hoffentlich bist du noch aktiv hier?

@echo off
for /f "tokens=3" %%i in ('dir /s /a /-c "%~1" ^| findstr "Datei(en)"') do set size=%%i
exit /b %size%