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

Name Anzahl und Größe von Dateien die in einen Verzeichnis stehen ermitteln

Frage Entwicklung Batch & Shell

Mitglied: tommhii

tommhii (Level 1) - Jetzt verbinden

11.07.2012 um 11:54 Uhr, 4401 Aufrufe, 19 Kommentare, 1 Danke

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

Mitglied: bastla
11.07.2012, aktualisiert um 13:38 Uhr
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 - "for /?") ...

... ansonsten einfach:
01.
@echo off & setlocal 
02.
cls 
03.
echo\ 
04.
echo * Anzahl Name und Größe von Dateien ermitteln die in einen Verzeichnis stehen * 
05.
echo * ermitteln * 
06.
echo\ 
07.
chcp 1252>nul 
08.
set ss=ß 
09.
set oe=ö 
10.
set ue=ü 
11.
chcp 850>nul 
12.
set filegr=d:\tmp\*.log 
13.
for /f "tokens=1,3" %%i in ('dir /s/-c "%filegr%"^|findstr "Datei(en)"') do set /a Anzahl=%%i & set /a Variable=%%j 
14.
echo %Anzahl% Datei(en) mit einer Gr%oe%%ss%e von %Variable% Bytes
Grüße
bastla

P.S.: Findest Du nicht, dass Batch mit "Code"-Formatierung (lässt sich auch nachträglich hinzufügen) besser aussieht?
Bitte warten ..
Mitglied: tommhii
11.07.2012 um 14:50 Uhr
Danke bastla für Deine Antwort.
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
aber so klappt es nicht

meine Ausgabe Zeile sollte so aussehen ohne das in der Klammer
1 Datei(en) mit dem Namen (d:\Tmp\)tag.log einer Größe von 319.115 = Bytes
wie bekommt man den Punkt in der Byte Angabe weg (319.115)

VG
tommhi
Bitte warten ..
Mitglied: bastla
11.07.2012, aktualisiert um 15:38 Uhr
Hallo tommhi!
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?
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.
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
Bitte warten ..
Mitglied: tommhii
11.07.2012 um 16:23 Uhr
Hallo bastla
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?
ja sicher die Angabe der Anzahl gehört als letzte zeile in die Datei bin ja gerade am Anfang deshalb bin ich für jeden tip dankbar.
tag.log einer Größe von 319.115 = Bytes
tag1.log einer Größe von 319.115 = Bytes
2 Datei(en)

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.
wie wäre denn die anweisung richtg? und was meinst du mit dem Hinweis Code Formatierung, geht es darum weil ich das script so hier rein kopiert habe ?


Ist Dir ev der Schalter "/-c" in meinem Ansatz oben aufgefallen?
ja das ist mir aufgefallen mit dem Schalter /-c aber der lösst bei mir nicht das Problem mit dem Punkt, der erscheint trotzdem in der Ausgabe

VG
tommhi
Bitte warten ..
Mitglied: bastla
11.07.2012 um 16:44 Uhr
Hallo tommhii!
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:
01.
... 
02.
set "Pfad=d:\tmp" 
03.
set "Typ=log" 
04.
set /a Anz=0 
05.
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 
06.
echo %Anz% Datei(en)
Hinsichtlich des "/-c": Hast Du schon ein einfaches "dir /-c" an der Kommandozeile getestet und funktioniert es dort auch nicht?

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
11.07.2012 um 17:01 Uhr
Hallo bastla!

sorry das ich mich nicht gleich so ausgedrückt habe, das du nicht wußtest wo ich hin will.
ich will mir praktisch vor einer Sicherung die Dateinamen mit angabe der größe in eine Datei schreiben um einen Überblick zu haben, was ich gesichert habe.
das mit dem Schalter /-c funktioniert hatte da ein Zeichen falsch.
Ich hab dann nur noch eine Frage, wo baue ich die Umleitung ein, das die Dateinamen die Größe und die Anzahl in eine Datei geschrieben werden. So wie es in den Script angezeigt wird.
Dateia.log Größe von 3333=Bytes
Dateib.log Größe von 3333=Bytes
2 Datei(en)

Danke für deine Unterstützung hätte da bestimmt noch Tage dran gesessen.
VG
tommhii
Bitte warten ..
Mitglied: bastla
11.07.2012 um 17:16 Uhr
Hallo tommhii!

Umleitung einfach jeweils vor das "echo":
01.
set "Aus=D:\Dein.log" 
02.
del "%Aus%" 2>nul 
03.
... 
04.
for /f "tokens=3*" %%i in ('dir /s/-c "%Pfad%\*.%Typ%"^|findstr /e "\.%Typ%"') do set /a Anz+=1 & >>"%Aus%" echo %%j einer Gr%oe%%ss%e von %%i = Bytes 
05.
>>"%Aus%" echo %Anz% Datei(en)
Grüße
bastla
Bitte warten ..
Mitglied: tommhii
12.07.2012 um 07:22 Uhr
Hallo bastla,

danke erst mal es klappt muss die Ausgabe moch in ein ordentliches Format bringen.
Ich hab noch eine Frage kann ich die variablen die hier entstehen, in eine bestehende Textdatei einfügen.
In etwa so z.B. Inhalt der Datei : Datei.log
Bei der Sicherung wurden %ANZ% gesichert. Ist das möglich?

VG
tommhi
Bitte warten ..
Mitglied: bastla
12.07.2012 um 09:54 Uhr
Hallo tommhii!
kann ich die variablen die hier entstehen, in eine bestehende Textdatei einfügen.
Du kannst eine Textdatei mit den gewünschten Inhalten - per "echo" und Ausgabeumleitung (mit ">") - erstellen oder einer bestehende Datei (mit ">>") eine Zeile hinzufügen ...

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
12.07.2012 um 13:49 Uhr
Hallo bastla!
Du kannst eine Textdatei mit den gewünschten Inhalten - per "echo" und Ausgabeumleitung (mit
">") - erstellen oder einer bestehende Datei (mit ">>") eine Zeile hinzufügen ...

Ich weiss das ich an eine bestehende Datei Zeilen hinzufügen bzw anhängen kann. Meine Frage war, ob ich gewisse Inhalte, an eine bestimmte Stelle in eine bestehende Datei einfügen kann.
z.B.

Es wurden xxxxxx Dateien gesichert. (an die Stelle wo die XXX stehen den Inhalt von %Anz%)

VG
tommhi
Bitte warten ..
Mitglied: bastla
12.07.2012 um 14:46 Uhr
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:
01.
 >Ausgabe.txt type Vorlage1.txt 
02.
>>Ausgabe.txt echo Es wurden %Anz% Dateien gesichert. 
03.
>>Ausgabe.txt type Vorlage2.txt
Grüße
bastla
Bitte warten ..
Mitglied: tommhii
12.07.2012 um 16:21 Uhr
Zitat von bastla:

Hallo bastla
01.
 >Ausgabe.txt type Vorlage1.txt 
02.
> >>Ausgabe.txt echo Es wurden %Anz% Dateien gesichert. 
03.
> >>Ausgabe.txt type Vorlage2.txt 
04.
> 

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.

01.
 blat.exe %Email% -t Empfänger@web.de -c Kopie@web.de -s "Übermittlung des Sicherungsprotokoll ist erfolgt" 
02.
> 
Ich habe noch eine Frage zu den Umlauten , beim Email Versand benutze ich blat das funktioniert auch gut nur das Ü von Übermittlung wird als _ dargestellt.
Wenn ich für das Ü %ue% einsetze sieht der betreff und der text in der Email so aus :
Betreff =?ISO-8859-1?Q?=DCbermittlung=20des=20Sicherungsprotokoll=
was mache ich falsch ich habe doch in dem script folgende Zeilen am Anfang eingetragen
01.
 chcp 1252>nul 
02.
set ss=ß 
03.
set oe=ö 
04.
set ue=ü 
05.
chcp 850>nul 
06.
> 

VG
tommhi
Bitte warten ..
Mitglied: bastla
12.07.2012 um 18:17 Uhr
Hallo tommhii!
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 Thread des sich derzeit in Forums-Abstinenz übenden T-Mo ...
Was die Umlaute anlangt: Was spricht eigentlich dagegen, auf Codepage 1252 zu bleiben?

Grüße
bastla
Bitte warten ..
Mitglied: tommhii
13.07.2012 um 10:46 Uhr
ja ich hab schon alles probiert, aber die Umlaute werden im Betreff der Email nicht dargestellt. Irgendwie komm ich nicht weiter.

jemand noch einen Tip

VG
tommhi
Bitte warten ..
Mitglied: tommhii
20.07.2012, aktualisiert um 11:51 Uhr
Hallo,

das mit den Umlauten hab ich hin bekommen, ich hab aber noch ein anderes problem wo ich nicht weiss wie ich es realisieren soll.

Folgendes problem beschäftigt mich jetzt noch, es wäre schön wenn mir jemand einen tip geben könnte.
ich habe in einen Ordner ca 10 xml Dateien aus denen lese ich eine bestimmte zeichenfolge aus. Wenn die Datei die zeichenfolge enthält setze ich eine 1 an den dateinamen und schreibe den Dateinamen eine Datei mit dem Befehl
>
01.
 Find /C "25 , 30 ,10" *.xml | Find "XML: 1" > ergebnis.log  
02.
> > 
wie kann man das machen, das man von allen Dateinen die jetzt in der ergebnis.log stehen nochmal eine bestimmte zeichenfolge abfragt und den Wert der Abfrage hinter den Dateinamen in der Liste (ergebnis.log) schreibt.


VG
Tommhi
Bitte warten ..
Mitglied: bastla
20.07.2012 um 13:33 Uhr
Hallo tommhii!

Da Deine Zusatzfrage schon relativ weit vom ursprünglichen Thema des Threads entfernt ist, schlage ich vor, sie etwas genauer formuliert in einem neuen Beitrag nochmals zu stellen ...

Grüße
bastla
Bitte warten ..
Mitglied: pbelcl
02.08.2016 um 18:19 Uhr
Hallo @bastla
Habe deinen Code gerade gefunden und in ein Batch von mir eingebaut, DANKE!
01.
for /f "tokens=1,3" %%i in ('dir /s/-c "%filegr%"^|findstr "Datei(en)"') do set /a Anzahl=%%i & set /a Variable=%%j  
02.
echo %Anzahl% Datei(en) mit einer Gr%oe%%ss%e von %Variable% Bytes
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 ??
Bitte warten ..
Mitglied: bastla
06.08.2016 um 17:06 Uhr
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 %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
Bitte warten ..
Mitglied: pbelcl
06.08.2016 um 18:14 Uhr
Danke Bastla für den Tipp!
Das reicht mir schon, muss nur eine ungefähre Größenangabe ausgeben um zu kontrollieren ob ein Kopiervorgang erfolgreich war ....
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...