duddits
Goto Top

Größe aller Dateien in einen Verzeichnis bestimmen

Hi,

ich möchte ein Script(.bat) schreiben, das mir dir größe aller Dateien und Verzeichnisse in einem Verzeichnis angibt.
Ich weiß aber nicht wie ich das umsetzen soll?
Ich bräuchte erstmal einen Befehl der mir dir größe jeder Datei angibt und nicht alles zusammen zählt.
Am besten wäre noch wenn die größe der Dateien in MB angegeben wird.

mfg duddits

Content-ID: 21930

Url: https://administrator.de/contentid/21930

Ausgedruckt am: 21.11.2024 um 18:11 Uhr

ketchup
ketchup 19.12.2005 um 12:04:18 Uhr
Goto Top
diese tools gibts schon. müsstest nicht nochmal selbst erfinden.

du kannst zb das tools DIRUSE.EXE aus dem resourcekit benutzen.


jürgen
Honksen
Honksen 19.12.2005 um 12:23:30 Uhr
Goto Top
Hallo,

es geht glaub ich auch DIR SIZE VIEW.

Honk
duddits
duddits 19.12.2005 um 12:34:11 Uhr
Goto Top
Hi,

danke für die schnelle Hilfe, das Tool diruse.exe ist genau das wonach ich gesucht habe.
Danke.

mfg dudidts
Biber
Biber 19.12.2005 um 12:54:10 Uhr
Goto Top
...schade, sonst hätte ich noch ein paar DirSize.bat-Oneliner gepostet face-sad
duddits
duddits 19.12.2005 um 13:00:00 Uhr
Goto Top
@Biber
Hi,

das Problem ist zwar gelöst, aber da ich gerne was dazu lerne könntes du deine DirSize.bat-Oneliner posten (am besten mit einer kurzen erklärung).

mfg duddits
Biber
Biber 19.12.2005 um 22:09:10 Uhr
Goto Top
So, duddits,
hatte noch anderes zu tun, aber wollte noch kurz antworten.

Wobei natürlich die Antwort einen eher spielerischen Charakter hat - ich will mit meinen Onelinern keine in C# programmierten Utilities nit 7 Parametern und 34 DLL-Aufrufen ersetzen...

Was M$ ja schon immer vergessen hat, ist ein simples CMD-Utility, mit dem ich "eben mal" auch im Batch folgende drei Fälle abfackeln kann:
-> wieviel Byte sind im Verzeichnis xy durch Dateien belegt?
-> wieviel Byte sind im Verzeichnis xy und in allen Unterzeichnissen durch Dateien belegt?
-> wieviel Byte sind im Verzeichnis xy durch Dateien vom Typ *.doc (oder 1999*.log) belegt?

M$ hatte da immer wieder mal kurz aufflackernde Ansätze (TreeSize, DirUse,..) aber nichts, was alle drei Anforderungen abdeckt.
Gerade DirUse.exe ist doch wohl albern:
(Abfrage aktuelles Verzeichnis E:\jokes)
>diruse .

    Size  (b)  Files  Directory
      8367760     82  SUB-TOTAL: .
      8367760     82  TOTAL: .
~~
Bitte wie soll ich so einen Output weiterverarbeiten?? Und, jetzt kommt es:
>diruse *.txt

    Size  (b)  Files  Directory
Unknown Error      0  *.TXT
            0      0  TOTAL: *.TXT
~~~~
Na, klasse... dafür hat ein Redmonder Team 3 Jahre gebraucht...*seufz*

wenn ich statt dessen am CMD-Prompt eingebe:
>dir e:\jokes|find "Datei(en)"  
              65 Datei(en)      7.244.837 Bytes
...habe ich mehr Informationen und schneller
-und-
>dir e:\jokes\*.jpg|find "Datei(en)"  
               8 Datei(en)        986.303 Bytes
...das kann ich auch *gg

Nachteil: Was ich eigentlich wollte, war ja nur eine Bytezahl, nach dem Motto: wenn ich mehr als 40000000 Byte an Logdateien im Verzeichnis habe, lösch ich die ältesten oder so.

Als etwas kryptischer CMD-Oneliner sieht das so aus:
>>set/a "sum=0">nul & (for /f "delims=" %i in ('dir /b /a-d') do @Set/a sum+=%~zi>nul ) & echo %sum%  
7244837
...aber den würde ich auch in mehrere Zeilen auseinanderziehen, damit er lesbar wird (aber ich will ihn ja als CMD-zeile abschicken, nicht als Batch!)
::---als Batch
@echo off
set/a "sum=0">nul   
for /f "delims=" %%i in ('dir /b /a-d') do @Set/a sum+=%%~zi>nul  
echo %sum%
:: ----
[Output wäre wieder: 7244837]

Und ich kann dieselbe Mimik in einer FOR /R..IN..DO- Anweisung dazu nutzen, alle Unterverzeichnisse zu durchsuchen... eben auch mit Gesamtgrößenangaben bezogen auf Dateitypen. Die FOR /R-Variante hatte ich schon mal gepostet (aber noch nicht wiedergefunden), eine FOR /F-Variante lass ich mal hier:

::---dirsizeMitFORF.bat
@echo off & setlocal 
Set DIRCMD= 
If exist %1 ( 
  for /f "tokens=3" %%c  in ('dir %1 /s ^| findstr /c:Datei^(en^) ') do set DirSize=%%c   
) 
if defined DirSize echo %DirSize% 
::---dirsizeMitFORF.bat
Die FOR /R-Variante reiche ich nach, sobald ich sie finde.
Und, wie geschrieben, alles nur aus for educational purposes, nicht als direktes Konkurrenzprodukt zu irgendwelchen Utility-Exedateien.
Gruß Biber
superboh
superboh 20.12.2005 um 04:13:33 Uhr
Goto Top
@Biber:
Du schaffst es doch immer wieder aus einem (fast) Einzeiler ein Tuturial zu machen face-smile. Wenn ich mir das Ganze doch nur besser merken könnte face-sad.

Gibt es da einen Trick? Oder ein gutes Buch? Wohl nicht, oder hast Du schon eines geschrieben?

Gruss,
Thomas
Biber
Biber 20.12.2005 um 17:28:12 Uhr
Goto Top
@thomas
Du schaffst es doch immer wieder aus einem (fast) Einzeiler ein Tuturial zu machen...

Hmm...ich nehm das mal als Kompliment... oder hieß das durch die Blume "Schwafel nicht so viel rum!" ??? face-big-smile face-big-smile

Für ein Buch habe ich noch keinen Verleger gefunden, ich hätte aber bestimmt auch Schwierigkeiten, irgendein beliebiges Thema nach meinem subjektiven Gefühl tatsächlich vollständig abgehandelt zu haben.
"Erschöpfend" behandelt vielleicht... für die Leser, aber "vollständig"?? *gg

Grüße Biber

P.S. @duddits
...eine Anzeige/Umrechnung der Bytes in KByte oder MByte wäre auch kein Problem.
Hab ich mir geschenkt, weil... ein "Set /a sum /=1024" bekommst Du auch ohne mich hin, glaub ich.
duddits
duddits 21.12.2005 um 11:57:59 Uhr
Goto Top
Hi,

noch mals danke für deine Hilfe, echt super was du da gebastelt hast. face-smile

mfg duddits