Name Anzahl und Größe von Dateien die in einen Verzeichnis stehen ermitteln
Ich habe mir ein Script geschrieben , damit lese ich aus einen bestimmten Verzeichnis Dateinamen die Anzahl und deren Größe aus und gebe das Ergebnis aus.
Ich möchte aus einen bestimmten Verzeichnis Dateinamen ,die Anzahl der darin befindlichen Dateien und deren Größe ermitteln. Diese Ergebnisse ( die Echo Zeile )möchte ich dann ausgeben als Variable um diese dann weiter zuverwenden in einer Mail.
Nun möchte ich bei der Größen Angabe den Punkt entfernen (z.B. 319.115 Bytes) und die Pfad angabe vor dem ausgegeben Dateinamen gern entfernen. Hat jemand einen Tip wie ich das elegant lösen kann.
Danke
VG Tommhii
@echo off
cls
echo
echo * Anzahl Name und Größe von Dateien ermitteln die in einen Verzeichnis stehen *
echo * ermitteln *
echo
chcp 1252>nul
set ss=ß
set oe=ö
set ue=ü
chcp 850>nul
set filegr=d:\tmp\*.log
for /F "Tokens=1" %%a in ('dir /S /b d:\Tmp\*.log') do set Name=%%a
dir d:\tmp\*.log|Findstr "Datei" >>datei.Log
For /F "Tokens=3 Delims= " %%a in (datei.Log) do set Variable=%%a
For /F "Tokens=1 Delims= " %%a in (datei.Log) do set Anzahl=%%a
echo %Anzahl% Datei(en) mit dem Namen %Name% und einer Gr%oe%%ss%e %Variable% = Bytes
Ich möchte aus einen bestimmten Verzeichnis Dateinamen ,die Anzahl der darin befindlichen Dateien und deren Größe ermitteln. Diese Ergebnisse ( die Echo Zeile )möchte ich dann ausgeben als Variable um diese dann weiter zuverwenden in einer Mail.
Nun möchte ich bei der Größen Angabe den Punkt entfernen (z.B. 319.115 Bytes) und die Pfad angabe vor dem ausgegeben Dateinamen gern entfernen. Hat jemand einen Tip wie ich das elegant lösen kann.
Danke
VG Tommhii
@echo off
cls
echo
echo * Anzahl Name und Größe von Dateien ermitteln die in einen Verzeichnis stehen *
echo * ermitteln *
echo
chcp 1252>nul
set ss=ß
set oe=ö
set ue=ü
chcp 850>nul
set filegr=d:\tmp\*.log
for /F "Tokens=1" %%a in ('dir /S /b d:\Tmp\*.log') do set Name=%%a
dir d:\tmp\*.log|Findstr "Datei" >>datei.Log
For /F "Tokens=3 Delims= " %%a in (datei.Log) do set Variable=%%a
For /F "Tokens=1 Delims= " %%a in (datei.Log) do set Anzahl=%%a
echo %Anzahl% Datei(en) mit dem Namen %Name% und einer Gr%oe%%ss%e %Variable% = Bytes
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 187814
Url: https://administrator.de/forum/name-anzahl-und-groesse-von-dateien-die-in-einen-verzeichnis-stehen-ermitteln-187814.html
Ausgedruckt am: 23.12.2024 um 12:12 Uhr
19 Kommentare
Neuester Kommentar
Hallo tommhi!
Was Du mit dem Namen vorhast, ist mir nicht wirklich klar (es werden ja alle im angegebenen Ordner und in der Struktur unterhalb davon befindlichen "log"-Dateien einbezogen), aber nur den Namen erhältst Du mit "%%~na" oder "%%~nxa" (steht auch in der Hilfe - "
... ansonsten einfach:
Grüße
bastla
P.S.: Findest Du nicht, dass Batch mit "Code"-Formatierung (lässt sich auch nachträglich hinzufügen) besser aussieht?
Was Du mit dem Namen vorhast, ist mir nicht wirklich klar (es werden ja alle im angegebenen Ordner und in der Struktur unterhalb davon befindlichen "log"-Dateien einbezogen), aber nur den Namen erhältst Du mit "%%~na" oder "%%~nxa" (steht auch in der Hilfe - "
for /?
") ...... ansonsten einfach:
@echo off & setlocal
cls
echo\
echo * Anzahl Name und Größe von Dateien ermitteln die in einen Verzeichnis stehen *
echo * ermitteln *
echo\
chcp 1252>nul
set ss=ß
set oe=ö
set ue=ü
chcp 850>nul
set filegr=d:\tmp\*.log
for /f "tokens=1,3" %%i in ('dir /s/-c "%filegr%"^|findstr "Datei(en)"') do set /a Anzahl=%%i & set /a Variable=%%j
echo %Anzahl% Datei(en) mit einer Gr%oe%%ss%e von %Variable% Bytes
bastla
P.S.: Findest Du nicht, dass Batch mit "Code"-Formatierung (lässt sich auch nachträglich hinzufügen) besser aussieht?
Hallo tommhi!
Grüße
bastla
meine Ausgabe Zeile sollte so aussehen
1 Datei(en) mit dem Namen (d:\Tmp\)tag.log einer Größe von 319.115 = Bytes
Diese Ausgabe ist mE widersinnig - entweder gebe ich die Daten für jede einzelne Datei aus, oder ich will eine Zusammenfassung (x Dateien sind zusammen y Bytes groß) - welcher Dateiname sollte denn dann dort stehen?1 Datei(en) mit dem Namen (d:\Tmp\)tag.log einer Größe von 319.115 = Bytes
Wenn ich Dich richtig verstehe sollte die Anweisung so aussehen ?
for /F "Tokens=1" %%~na in ('dir /S /b d:\Tmp\*.log') do set Name=%%a
Du hast mich weder damit richtig verstanden (und, ganz nebenbei: so viele Alternativen, die Du noch testen könntest, gibt's da nicht) noch mit meinem Hinweis auf die "Code"-Formatierung.for /F "Tokens=1" %%~na in ('dir /S /b d:\Tmp\*.log') do set Name=%%a
wie bekommt man den Punkt in der Byte Angabe weg (319.115)
Ist Dir ev der Schalter "/-c
" in meinem Ansatz oben aufgefallen?Grüße
bastla
Hallo tommhii!
Vesuch es etwa so:
Hinsichtlich des "
Grüße
bastla
ja sicher die Angabe der Anzahl gehört als letzte zeile in die Datei bin ja gerade am Anfang
Warum beschreibst Du dann Dein Vorhaben nicht gleich komplett?Vesuch es etwa so:
...
set "Pfad=d:\tmp"
set "Typ=log"
set /a Anz=0
for /f "tokens=3*" %%i in ('dir /s/-c "%Pfad%\*.%Typ%"^|findstr /e "\.%Typ%"') do echo %%j einer Gr%oe%%ss%e von %%i = Bytes & set /a Anz+=1
echo %Anz% Datei(en)
/-c
": Hast Du schon ein einfaches "dir /-c
" an der Kommandozeile getestet und funktioniert es dort auch nicht?Grüße
bastla
Hallo tommhii!
Wenn es sich offensichtlich um eine Vorlage handelt, dann kannst Du in "Vorlage1.txt" den Teil vor der fraglichen Zeile und in "Vorlage2.txt" alle noch folgenden Zeilen hinterlegen und das Dokument mit dem gewünschten Inhalt so erstellen:
Grüße
bastla
Wenn es sich offensichtlich um eine Vorlage handelt, dann kannst Du in "Vorlage1.txt" den Teil vor der fraglichen Zeile und in "Vorlage2.txt" alle noch folgenden Zeilen hinterlegen und das Dokument mit dem gewünschten Inhalt so erstellen:
>Ausgabe.txt type Vorlage1.txt
>>Ausgabe.txt echo Es wurden %Anz% Dateien gesichert.
>>Ausgabe.txt type Vorlage2.txt
bastla
Hallo tommhii!
Was die Umlaute anlangt: Was spricht eigentlich dagegen, auf Codepage 1252 zu bleiben?
Grüße
bastla
Sicher hab ich mich falsch ausgedrückt die Zeile Es wurden %Anz% Dateien gesichert befindet sich in der Vorlagen Datei und zwischen dem worten "wurden und Dateien " wollte ich den ermittelten Wert der Variablen %Anz% einfügen.
Das habe ich schon verstanden - deswegen auch der Vorschlag, die Vorlagendatei aufzuteilen in "vor der Anzahl-Zeile" und "nach der Anzahl-Zeile" und die "Anzahl-Zeile" selbst einfach direkt per "echo
" zu erstellen. Wenn Du allerdings tatsächlich einen Platzhalter ersetzen willst, findest Du eine Reihe von Threads zum Thema "Ersetzen in Batch" und sogar einen entsprechenden ...Was die Umlaute anlangt: Was spricht eigentlich dagegen, auf Codepage 1252 zu bleiben?
Grüße
bastla
Hallo @bastla
Habe deinen Code gerade gefunden und in ein Batch von mir eingebaut, DANKE!
Passt hervorragend!!
Die Krönung wäre jetzt noch die Anzeige in Megabyte
Mir wär nur eingefallen die Punkte in der Zahl mit /c einzublenden, abzufragen und das ergebnis in 4 einzelne Variablen aufzuteilen
Geht das vielleicht einfacher ??
Habe deinen Code gerade gefunden und in ein Batch von mir eingebaut, DANKE!
for /f "tokens=1,3" %%i in ('dir /s/-c "%filegr%"^|findstr "Datei(en)"') do set /a Anzahl=%%i & set /a Variable=%%j
echo %Anzahl% Datei(en) mit einer Gr%oe%%ss%e von %Variable% Bytes
Die Krönung wäre jetzt noch die Anzeige in Megabyte
Mir wär nur eingefallen die Punkte in der Zahl mit /c einzublenden, abzufragen und das ergebnis in 4 einzelne Variablen aufzuteilen
Geht das vielleicht einfacher ??
Hallo pbelcl!
Rechnen mit so großen Zahlen ist in CMD eigentlich nicht möglich (nur im Bereich von -2.147.483.648 bis +2.147.483.647, also 31 Bit), daher musst Du ohnehin tricksen - machst Du es wie die Fetplattenhersteller (1 MB = 1.000.000 Bytes), könntest Du einfach mit
Grüße
bastla
Rechnen mit so großen Zahlen ist in CMD eigentlich nicht möglich (nur im Bereich von -2.147.483.648 bis +2.147.483.647, also 31 Bit), daher musst Du ohnehin tricksen - machst Du es wie die Fetplattenhersteller (1 MB = 1.000.000 Bytes), könntest Du einfach mit
%Variable:~0,-6%
die letzten 6 Stellen weglassen (und würdest damit dann eben auf ganze MB abrunden); ansonsten wird es etwas aufwändiger (zB mittels eines temporären VBScripts - findest Du auch hier irgendwo) ...Grüße
bastla