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, 16865 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
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
CMD cURL Access Token parsen (2)

Frage von maddig zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...