Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 21732 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 ..
Ähnliche Inhalte
Microsoft Office
gelöst VBA - aktuelle Kalenderwoche ermitteln (3)

Frage von Ghost108 zum Thema Microsoft Office ...

Visual Studio
gelöst SIDs eines Verzeichnisses ermitteln (1)

Frage von joehuaba zum Thema Visual Studio ...

Batch & Shell
gelöst Programm über CMD starten (9)

Frage von Galawayne zum Thema Batch & Shell ...

Vmware
gelöst Virtuelle Maschine mit der cmd öffnen? (13)

Frage von PascalIT zum Thema Vmware ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Windows Server
Kennwort vergessen bei Hyper vserver 2012r (12)

Frage von jensgebken zum Thema Windows Server ...

Linux Desktop
Bildschirmauflösung unter Linux festlegen (12)

Frage von itebob zum Thema Linux Desktop ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Gebäude mit WLAN ausstatten (9)

Frage von udobec zum Thema LAN, WAN, Wireless ...