Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

CMD per Dir Ordnergrößen ermitteln

Frage Entwicklung Batch & Shell

Mitglied: 74487

74487 (Level 1)

20.07.2009, aktualisiert 08:53 Uhr, 18078 Aufrufe, 11 Kommentare

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.
Mitglied: Seardan
20.07.2009 um 09:03 Uhr
Hallo,

dir /? wäre nicht schlecht

Wie sieht es mit dir /s /w (eventuell /p) aus

Andreas
Bitte warten ..
Mitglied: 74487
20.07.2009 um 09:06 Uhr
Naja da zeigt er jede Datei an. Ich hätte gerne nur die Ordner mit einer Größe dahinter.
Bitte warten ..
Mitglied: 74487
20.07.2009 um 09:28 Uhr
Hab eine Lösung:

Programm heißt TreeSize.
Bitte warten ..
Mitglied: Seardan
20.07.2009 um 09:37 Uhr
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
Bitte warten ..
Mitglied: bastla
20.07.2009 um 10:03 Uhr
@Seardan
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)
Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
01.08.2009 um 02:25 Uhr
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
01.
::schnipp------Ordnergroessen Anzeigen.bat 
02.
@echo off 
03.
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1" 
04.
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" ) 
05.
for /f "tokens=2,3 delims=?=" %%i in ('set..') do echo %%i   hat: %%j bytes& set /a folders + = 1 
06.
echo %folders% Ordner & pause & goto :eof 
07.
:zaehl 
08.
if defined "..?%~1" (set /a summend + = %summ:.=%) else set "summend=%summ:.=%" 
09.
set "..?%~1=%summend%" 
10.
::schnapp------Ordnergroessen Anzeigen.bat
Gruß Phil
Bitte warten ..
Mitglied: bastla
01.08.2009 um 02:50 Uhr
@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
Bitte warten ..
Mitglied: pieh-ejdsch
01.08.2009 um 04:08 Uhr
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.


01.
::schnipp------Ordnergroessen Anzeigen.bat 
02.
@echo off 
03.
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1" 
04.
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" ) 
05.
for /f "tokens=2,3 delims=?=" %%i in ('set..') do echo %%i   hat: %%j bytes& set /a folders + = 1 
06.
echo %folders% Ordner& pause & goto :eof 
07.
:zaehl 
08.
if defined "..?%~1" (set /a summend + = summ) else set "summend=%summ%" 
09.
set "..?%~1=%summend%" 
10.
::schnapp------Ordnergroessen Anzeigen.bat
Gruß Phil
Bitte warten ..
Mitglied: bastla
01.08.2009 um 10:41 Uhr
@PH
Wenn Du allerdings in Zeile 8 den folgenden "else"-Zweig verwendest:
... else (set "summend=%summ%" & echo gesetzt: %summ%)
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
..?Unterordner
sondern nach
"..?Unterordner"
und kann diese nicht finden - daher "not defined" ...

... bzw anders rum:
01.
:zaehl 
02.
if defined ..?%~1 set ..?%~1 
03.
set "summend=%summ%" 
04.
set "..?%~1=%summend%"
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
Bitte warten ..
Mitglied: pieh-ejdsch
02.08.2009 um 00:17 Uhr
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
01.
::schnipp------Ordnergroessen Anzeigen.bat 
02.
@echo off & setlocal 
03.
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1" 
04.
if not "%pfad:~-1%" == "\" set "pfad=%pfad%\" 
05.
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" 
06.
for /f "tokens=2,3 delims=?=" %%i in ('set..') do echo %%i   hat: %%j bytes& set /a folders + = 1 
07.
echo %folders% Ordner& pause & goto :eof 
08.
::schnapp------Ordnergroessen Anzeigen.bat
Bitte warten ..
Mitglied: pieh-ejdsch
06.08.2009 um 03:50 Uhr
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.

01.
::schnipp------Ordnergroessen Anzeigen.bat 
02.
@echo off & setlocal & set Fkilo=0& title Ordnergroessen 
03.
if "%~1"=="" (set "pfad=%~dp0" ) else set "pfad=%~1" 
04.
if not "%pfad:~-1%" == "\" set "pfad=%pfad%\" 
05.
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" 
06.
for /f "tokens=2,3 delims=?=" %%i in ('set.. 2^>nul') do (echo %%i     hat: %%j bytes& set /a folders + = 1 &call :rechner %%j) 
07.
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 
08.
:rechner 
09.
set /a gignr = 0 , petnr = 0 
10.
set alls=%1 
11.
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 ) 
12.
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) 
13.
:woutgig 
14.
set Falls=%Fpeta%%Fgiga%%Fkilo% 
15.
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 ) 
16.
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 ) 
17.
if %Fpeta% gtr 0 set /a Fpeta = Fpeta + peta - petnr + %Fgiga:~ 0, -6% ,  
18.
set Fkilo=%Fkilo:~ -6% 
19.
if %Fgiga% == 0 (set "Fgiga=") else set Fgiga=%Fgiga:~ -6% 
20.
if %Fpeta% == 0 set "Fpeta=" 
21.
goto :eof 
22.
::schnapp------Ordnergroessen Anzeigen.bat
Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Batch & Shell
gelöst Sonderzeichen in der CMD Konsole darstellen? (1)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Batch & Shell
Iso einlegen und cmd ausführen (4)

Frage von Morslupatus zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Linux Netzwerk
gelöst DHCP vergibt keine Adressen (31)

Frage von Maik82 zum Thema Linux Netzwerk ...

Switche und Hubs
LAG zwischen SG300-Switches macht Probleme. Wer weiß Rat? (21)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...

Apache Server
gelöst Lets Encrypt SSL mit Apache2 (20)

Frage von banane31 zum Thema Apache Server ...