101566
Goto Top

Göße aller Dateien eines Dateityps ermitteln (BATCH)

Hallo Community,

in den letzten Tagen habe ich haufenweise Scripts, Tipps und nützliche Anleitungen hier entdeckt und war einfach begeistert.
Also hab ich mich heute dazu durch geringt mich anzumelden, da ich doch nicht alles für mich passendes finden konnte ;)
Ich war begeistert von dem Wissen und Engagement der Community.

Ich hoffe Ihr könnt mir helfen und viel Spaß:

Vorab:
Ich benutze Windows XP (falls das notwendig ist zu wissen^^)

Mein Problem/Aufgabe ist folgendes, ich möchte mit Hilfe einer BATCH-Datei die Größe aller Dateien eines Dateityps ermitteln.
Ich habe einen Ordner mit mehreren Dateien und unterschiedlichen Dateitypen. Davon möchte ich die Größe von speziell ausgewählten Dateitypen rausgefiltert bekommen und dies eventuell möglich machen für mehrere Dateitypen (z.B: doc und zip)


Ich habe schon ein bisschen rumgebastelt und bin auf folgendes gekommen:

set Quelle=c:\test\
set Typen=etx

FOR %%t in (%Typen%) do (
FOR /F "tokens=3" %%i in ('dir /-c /s %Quelle%*.etx') do set Gesamt=%%i
)
echo Groesse der Dateien: %Gesamt%

Allerdings treten folgende Fehler auf:
1. Fehler: Nach erfolgreichem Auslesen und Zusammenfassen der Dateigrößen von (z.B. doc) wird angezeigt:
0 Dir(s) und z.B: 40000000000 Bytes frei (also der freie Speicherplatz)

64697745cc873d28ff642956da2a90cd

2. Fehler: Es werden nur die Dateigrößen des selben Dateityps zusammengefasst

3. Fehler wenn ich keine zip dateien habe und doc zuerst bei dateitypen angebe werden diese zwar ausglesen und zusammengefasst da aber *.zip nicht gefunden werden kann steht dann als
echo %Gesamt%=*Dateipfad*

Ich hoffe ihr könnt mir helfen und falls ihr noch zusätliche Informationen braucht, bzw. Fragen habt, ich bin da!

Vielen Dank,
Robert

Content-Key: 170514

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: bastla
bastla Jul 27, 2011 at 11:50:44 (UTC)
Goto Top
Hallo Gdlii3Gmn und willkommen als Mitglied!

Versuch es etwa so:
@echo off & setlocal
set "Quelle=c:\test"  
set "Typen=doc zip"  

set "Spaces=                    "  
for %%t in (%Typen%) do call :ProcessType %%t
goto :eof

:ProcessType
set "Gesamt=%Spaces%0"  
for /f "tokens=3" %%i in ('dir /s /-c "%Quelle%\*.%1" 2^>nul^|findstr "Datei(en)"') do set "Gesamt=%Spaces%%%i"  
echo %1:%Gesamt:~-12%
goto :eof
Die Länge der Ausgabe (derzeit 12 Stellen) kannst Du variieren, indem Du den entsprechenden Wert in der Zeile 12 änderst ...

Grüße
bastla
Mitglied: 101566
101566 Jul 27, 2011 at 11:56:28 (UTC)
Goto Top
Wahnsinn ;)
kaum 15min und da hab ich schon eine super Antwort
Ich teste gleich mal und sag dann bescheid und danke dir Bastla

P.S. von Dir hab ich schon viel gelesen face-smile
Mitglied: 101566
101566 Jul 27, 2011 at 12:22:33 (UTC)
Goto Top
Könntest du "bastla" oder jmd anderes mir folgenden Ausschnitt erklären:

2^>nul^|findstr "Datei(en)"
Member: Skyemugen
Skyemugen Jul 27, 2011 at 12:30:09 (UTC)
Goto Top
Aloha,

nun, 2>nul leitet eventuelle Fehlermeldungen ins Nichts um (unterdrückt sie), da dies in der Klammer der Schleife ausgeführt wird, muss das Zeichen > mit ^ escaped werden,

ebenso das | Zeichen (pipe), das dazu genutzt wird, einen folgenden Befehl mit dem vorangegangenen zusammenzufügen.

Da in der dir-Ausgabe, die Zusammenfassung am Ende steht und hier die Information der Dateigröße in der Zeile mit Datei(en) vorkommt, sucht man also danach mit findstr "Datei(en)" und lässt somit nur das Ergebnis diesen Fundes (also hier die eine gewollte Zeile) ausgeben.

Also: Zeige mir das Directory, unterdrücke Fehlermeldungen und gebe nur als Ergebnis die Zeile aus, in der Datei(en) vorkommt

greetz André
Mitglied: 101566
101566 Jul 27, 2011 at 13:01:42 (UTC)
Goto Top
Vielen Dank André,

Unten ist ein Bild von der Ausgabe bei folgendem Code:

set "Quelle=c:\test"  
set "Typen=doc zip"   

for %%t in (%Typen%) do call :ProcessType %%t
goto :eof 

:ProcessType
set "Gesamt=%Spaces%0"  
for /f "tokens=3" %%i in ('dir %Quelle%\*.%1 /s /-c 2^>nul^|findstr "Datei(en)"') do set "Gesamt=%Spaces%%%i"  
echo %1:%Gesamt:~-9%
goto :eof

ca877776ffdebc9836dfdfaef2cd55ff

Was mach ich falsch? Findet Ihr ein Fehler?

P.S. ohne 2^>nul^|findstr "Datei(en)" erhalte ich folgende Ausgabe:

4a19aec9fdcb6b8f37d47e04095a5b73
Member: Friemler
Friemler Jul 27, 2011 at 13:50:17 (UTC)
Goto Top
Hallo Gdlii3Gmn,

Du benutzt anscheinend ein englisches XP, dort musst Du schreiben
for /f "tokens=3" %%i in ('dir %Quelle%\*.%1 /s /-c 2^>nul^|findstr "File(s)"') do set "Gesamt=%Spaces%%%i"

Gruß
Friemler
Mitglied: 101566
101566 Jul 27, 2011 at 13:59:47 (UTC)
Goto Top
Das klappt !
Ich danke dir sehr!

Und hoffe du liest meine Fragen in Zukunft früher face-smile

danke und gruß,
robert
Member: Skyemugen
Skyemugen Jul 27, 2011 at 14:00:02 (UTC)
Goto Top
... hm, das hätte uns auffallen sollen, schon beim ersten Screenshot (aber ehrlich gesagt, habe ich den ignoriert *pfeif*) ^_^

Na, immerhin Friemler passt auf, höhö.
Mitglied: 101566
101566 Jul 27, 2011 at 14:06:47 (UTC)
Goto Top
Ich wäre nie drauf gekommen und wusste das nicht einaml im Ansatz!

ich werde zur Vollständigkeit später mien Script nochmal nach editieren...
Ich danke euch..

@Skyemugen... das ist das problem wenn die frage stellung zu lang ist, dann liest man nur die hälfte ;)

nächstes mal kürze ich es ;)
gruß
robert
Member: Friemler
Friemler Jul 27, 2011 at 14:20:20 (UTC)
Goto Top
Hallo Gdlii3Gmn,

um sprachunabhängig zu werden, könntest Du auch
for /f "tokens=3" %%i in ('dir %Quelle%\*.%1 /s /-c 2^>nul^|findstr /i /r /c:"[0-9] Bytes$"') do set "Gesamt=%Spaces%%%i"
benutzen. Damit wird nach der Zeile gesucht, die mit Bytes (groß oder klein geschrieben) endet. Davor muss, durch ein Leerzeichen getrennt, eine Ziffer stehen.

Gruß
Friemler
Mitglied: 101566
101566 Jul 27, 2011 at 14:25:38 (UTC)
Goto Top
Super, Danke,
kann ich gut gebrauchen!

ich mach mal ein nuees Thema auf, für nuee Fragen^^

Gruß,
Robert