ipzipzap
Goto Top

Logfiles aus mehreren Unterverzeichnissen rekursiv in eine Datei kopieren

Hallo,

Ich habe hier ein Verzeichnis mit täglichen Logfiles, sortiert wiederum in Unterverzeichnissen:

\LOGFILES\DAILY\20120501\CLIENT01.LOG
\LOGFILES\DAILY\20120501\CLIENT02.LOG
\LOGFILES\DAILY\20120501\CLIENT03.LOG
...
\LOGFILES\DAILY\20120502\CLIENT01.LOG
\LOGFILES\DAILY\20120502\CLIENT02.LOG
\LOGFILES\DAILY\20120502\CLIENT03.LOG
...
\LOGFILES\DAILY\20120503\CLIENT01.LOG
\LOGFILES\DAILY\20120503\CLIENT02.LOG
\LOGFILES\DAILY\20120503\CLIENT03.LOG
...

Diese Logs möchte ich nun in eine einzige Datei kopieren, z.B. nach:

\LOGFILES\DAILY\LOGS.LOG

Ich lese mich jetzt hier schon zwei Tage durch, aber eine funktionierende Lösung für mein Problem kann ich bis jetzt leider nicht finden.
Jemand eine Idee, wie ich das Problem lösen kann? Oder ist dies mit Batch nicht möglich?


Danke im Voraus,
ippi

Content-Key: 184309

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

Printed on: May 21, 2024 at 23:05 o'clock

Mitglied: 60730
60730 May 01, 2012 at 06:12:04 (UTC)
Goto Top
Moin,

Hmm anhand deiner letzten zeile erkenne ich, dass du in zwei tagen aber wenig im batch bereich gesucht hast, denn dort schreibt jeder, danke immer gerne, wenn man gehilft hat aber blosss nicht vorher.


Also was brauchst du?
Eine batch, die eine schleife durchackert und nach dateien mit der suffix log in einem uebergeordnetetn ordner jahrmonattag sucht und die zu einer zusammenfasst?

Hmmm

For /r oder for /? Oder das tut zur for schleife
Type %a>>neues.logfile oder type /?
Oder copy neues.log + %a neues.log

Gruebel...

Gruss
Member: ipzipzap
ipzipzap May 01, 2012 at 06:40:47 (UTC)
Goto Top
Hmm anhand deiner letzten zeile erkenne ich, dass du in zwei tagen aber wenig im batch bereich gesucht hast, denn dort schreibt
jeder, danke immer gerne, wenn man gehilft hat aber blosss nicht vorher.

Ok, ich hab gesucht, aber nichts gefunden, was ich verstehe face-big-smile

Also was brauchst du?
Eine batch, die eine schleife durchackert und nach dateien mit der suffix log in einem uebergeordnetetn ordner jahrmonattag sucht
und die zu einer zusammenfasst?

Ja genau face-smile
Mitglied: 60730
60730 May 01, 2012 at 07:09:25 (UTC)
Goto Top
Zitat von @ipzipzap:
Ok, ich hab gesucht, aber nichts gefunden, was ich verstehe face-big-smile
ach so, versteh ich nicht

Also was brauchst du?
Eine batch, die eine schleife durchackert und nach dateien mit der suffix log in einem uebergeordnetetn ordner jahrmonattag sucht und die zu einer zusammenfasst?
*mea culpa, aber diese Frage war rhetorischer Natur

Ja genau face-smile
  • Perfekt, damit ist doch die Frage:
Jemand eine Idee, wie ich das Problem lösen kann?
beantwortet.
Und wie das geht (sogar detailliert mit 2 verschiedenen Ansätzen) das findest du, wenn du nicht suchen willst unter der Zeile hmmmm.
Member: Friemler
Friemler May 01, 2012 at 08:07:41 (UTC)
Goto Top
Hallo ipzipzap,

teste mal folgendes:
@echo off & setlocal

set "LogPath=E:\LogFiles\Daily"  
set "DestFile=%LogPath%\Logs.log"  

if not exist "%DestFile%" type NUL > "%DestFile%"  

for /f "delims=" %%d in ('dir /b /a:d /o:ne "%LogPath%"') do (  
  for /f "delims=" %%f in ('dir /b /a:-d /o:ne "%LogPath%\%%d"') do (  
    copy /b "%DestFile%"+"%LogPath%\%%d\%%f" "%DestFile%" > NUL  
  )
)

Ich gehe davon aus, dass sich in den nach dem Datum benannten Verzeichnissen wirklich NUR Logdateien befinden.

Gruß
Friemler
Member: ipzipzap
ipzipzap May 01, 2012 at 10:29:32 (UTC)
Goto Top
Hallo Friemler,

erstmal vielen Dank für die erste wirklich hilfreiche Antwort. Aus Deinem Beispiel werde sogar ich schlau. face-smile

Ich gehe davon aus, dass sich in den nach dem Datum benannten Verzeichnissen wirklich NUR Logdateien befinden.

Theoretisch ja, aber Du weißt ja, irgendwann ist da mal was drin, was da nicht reingehört.
Könnte ich dies aber nicht von vornherein umgehen? Etwa, indem ich das zweite "dir" in Deinem
Beispiel abändere? In etwa so:

for /f "delims=" %%d in ('dir /b /a:d /o:ne "%LogPath%"') do (  
  for /f "delims=" %%f in ('dir /b /a:-d /o:ne "%LogPath%\%%d\*.log"') do (  
    copy /b "%DestFile%"+"%LogPath%\%%d\%%f" "%DestFile%" > NUL  
  )
)

Ich hab also nur ein " *.log " hinten drangehängt. Was sagst du dazu?
Siehst Du da Probleme?


Gruß,
ippi
Member: Friemler
Friemler May 01, 2012 at 17:03:05 (UTC)
Goto Top
Hallo ipzipzap,

sooo, zurück vom 1. Mai Ausflug face-smile .

Zitat von @ipzipzap:
Ich hab also nur ein " *.log " hinten drangehängt. Was sagst du dazu?
Siehst Du da Probleme?

Nö, kein Problem, genau richtig.

Als Ergänzung für den Fall, das ein Verzeichnis mal GARKEINE Logdateien enthalten sollte oder das Verzeichnis, das eigentlich nach dem Datum benannte Verzeichnisse enthalten sollte, leer ist:
for /f "delims=" %%d in ('dir /b /a:d /o:ne "%LogPath%" 2>NUL') do (  
  for /f "delims=" %%f in ('dir /b /a:-d /o:ne "%LogPath%\%%d\*.log" 2>NUL') do (  
    copy /b "%DestFile%"+"%LogPath%\%%d\%%f" "%DestFile%" > NUL  
  )
)

Mit 2>NUL wird der Standardfehlerkanal auf das NUL-Device umgeleitet => Fehlermeldungen wie "Datei nicht gefunden" werden verschluckt und führen nicht zu einer Verarbeitung der FOR-Schleife(n).

Gruß
Friemler
Member: pieh-ejdsch
pieh-ejdsch May 02, 2012 at 12:01:25 (UTC)
Goto Top
moin Friemler,

... Fehlermeldungen wie "Datei nicht gefunden" werden verschluckt und führen nicht zu einer Verarbeitung der FOR-Schleife(n).

Ja - sicher ist es schon.

Die Forschleife verabeitet Kein Handle 2
scheinbar auch nicht wenn 2 nach 3 dubliziert wird - dafür aber wieder doch wenn dabei 1 nach 3 dubliziert wird.


>for /f %i in ('dir xy  2^>^&1') do @echo Ausgabe  
Ausgabe
Ausgabe
Ausgabe
Ausgabe

>for /f %i in ('dir xy  2^>^&3') do @echo Ausgabe  
Datei nicht gefunden
Ausgabe
Ausgabe
Ausgabe

>for /f %i in ('dir xy  1^>^&2 ') do @echo Ausgabe  
 Datenträger in Laufwerk C: ist Win7
 Volumeseriennummer: 6497-D5C3

 Verzeichnis von C:\Users\Pieh-Ejdsch

Datei nicht gefunden

>for /f %i in ('dir xy  1^>^&3 2^>^&1') do @echo Ausgabe  
Ausgabe
Ausgabe
Ausgabe
Ausgabe

Microsoft eben!

@echo off & setlocal

set "LogPath=E:\LogFiles\Daily"  
set "DestFile=%LogPath%\Logs.log"  

if not exist "%DestFile%" type NUL > "%DestFile%"  

for /d /r "%LogPath%" %%i in (*) do @if exist "%%i\CLIENT*.Log" copy /b "%Destfile%"+"%%i\CLIENT*.Log" "%DestFile%"  

Gruß Phil
Member: ipzipzap
ipzipzap May 03, 2012 at 10:06:28 (UTC)
Goto Top
Super, Danke!

Damit hat sich mein Problem hier gelöst face-smile