Batch - Logdatei kopieren
Hallo,
folgendes Problem: Ich kann mit batchscript nur ein komplettes Verzeichnis kopieren, möchte aber nur die zwei letzten Logfiles kopieren.
Aufgaben:
a) Ein Script (.bat-File) schreiben, dass sich einmal am Tag auf die Freigabe "\\192.11.7.53\sdshare" (Samba-Linux-Share auf anderem Server) verbindet.
User: tante
Pw: tante
b) Von dort sollen beiden neuesten Logfiles des vergangenen Tages (https/http-log = ssl-access-log/access-log) auf den Windows Server in das Verzeichnis "e:\gp_logs\d2" kopiert werden.
Kann mir jemand helfen? Das wäre sehr nett!
Mit freundlichen Grüßen
Azubi1
folgendes Problem: Ich kann mit batchscript nur ein komplettes Verzeichnis kopieren, möchte aber nur die zwei letzten Logfiles kopieren.
Aufgaben:
a) Ein Script (.bat-File) schreiben, dass sich einmal am Tag auf die Freigabe "\\192.11.7.53\sdshare" (Samba-Linux-Share auf anderem Server) verbindet.
User: tante
Pw: tante
b) Von dort sollen beiden neuesten Logfiles des vergangenen Tages (https/http-log = ssl-access-log/access-log) auf den Windows Server in das Verzeichnis "e:\gp_logs\d2" kopiert werden.
Kann mir jemand helfen? Das wäre sehr nett!
Mit freundlichen Grüßen
Azubi1
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80321
Url: https://administrator.de/forum/batch-logdatei-kopieren-80321.html
Ausgedruckt am: 20.04.2025 um 19:04 Uhr
6 Kommentare
Neuester Kommentar
b)
Wenn dein Name auch deiner Tätigkeit entspricht und du sowas öfters machen willst solltest du dir unter anderm die Hilfe zum For-Befehl anschauen (For /?) und ein Paar Baches von hier. Das hat dann auch einen guten Lerneffekt.
miniversum
Wenn dein Name auch deiner Tätigkeit entspricht und du sowas öfters machen willst solltest du dir unter anderm die Hilfe zum For-Befehl anschauen (For /?) und ein Paar Baches von hier. Das hat dann auch einen guten Lerneffekt.
set "copied="
FOR /F "delims=" %%i in ('dir X: /B /A-D /O-D') do if not defined copied set copied=1 & copy "%%i" "e:\gp_logs\d2"
set "copied="
FOR /F "skip=1 delims=" %%i in ('dir X: /B /A-D /O-D') do if not defined copied set copied=1 & copy "%%i" "e:\gp_logs\d2"
FOR /F "delims=" %%i in ('dir X: /B /A-D /O-D') do if not defined copied set copied=1 & copy "%%i" "e:\gp_logs\d2"
set "copied="
FOR /F "skip=1 delims=" %%i in ('dir X: /B /A-D /O-D') do if not defined copied set copied=1 & copy "%%i" "e:\gp_logs\d2"
miniversum
Hier nochmal mit Kommentar (in einzelnen Teilen):
Erzeuge ein leere Variable "copied"
Liste Alle Dateien im X: auf, keine Verzeichnisse, die neusten Dateien zuerst (siehe dir /?)
Gehe diese Liste einzeln durch (beginnend mit der ersten Zeile) (siehe For /?)
Wenn die Variable "copied" leer ist (bzw. nicht definiert) dann ... (siehe If /?)
... weise der Variabeln "copied" den Wert 1 zu (siehe set /?) und kopiere die Datei in der Liste die mit den for Befehl durchlaufen wird in das Verzeischnis "e:\gp_logs\d2" (siehe copy /?)
Die zweite Hälfte ist identisch mit einer Ausnahme:
Gehe diese Liste einzeln durch (beginnend nach der ersten Zeile) (siehe For /?)
Durch die Kostruktion das zuerst eine Variable leer erstellt wird (diese ist dann undefiniert)
und der For ... do if not defined ... set ... wird erreicht das immer nur der erste Eintrag in dieser Liste (wenn keiner mit skip übersprungen wird) verarbeitet wird. For würde sonst Jeden Eintrag verarbeiten (hier also jede datei Kopieren). Durch das Zuweisen eines Wertes unmittelbar vor oder nach dem copieren wird so die If Bedingung nur einmal erfüllt und nur eine Datei wird kopiert.
miniversum
Erzeuge ein leere Variable "copied"
set "copied="
Liste Alle Dateien im X: auf, keine Verzeichnisse, die neusten Dateien zuerst (siehe dir /?)
dir X: /B /A-D /O-D
Gehe diese Liste einzeln durch (beginnend mit der ersten Zeile) (siehe For /?)
FOR /F "delims=" %%i in ('dir X: /B /A-D /O-D') do ...
Wenn die Variable "copied" leer ist (bzw. nicht definiert) dann ... (siehe If /?)
... if not defined copied ...
... weise der Variabeln "copied" den Wert 1 zu (siehe set /?) und kopiere die Datei in der Liste die mit den for Befehl durchlaufen wird in das Verzeischnis "e:\gp_logs\d2" (siehe copy /?)
... set copied=1 & copy "%%i" "e:\gp_logs\d2"
Die zweite Hälfte ist identisch mit einer Ausnahme:
Gehe diese Liste einzeln durch (beginnend nach der ersten Zeile) (siehe For /?)
FOR /F "delims=" %%i in ('dir X: /B /A-D /O-D') do ...
Durch die Kostruktion das zuerst eine Variable leer erstellt wird (diese ist dann undefiniert)
und der For ... do if not defined ... set ... wird erreicht das immer nur der erste Eintrag in dieser Liste (wenn keiner mit skip übersprungen wird) verarbeitet wird. For würde sonst Jeden Eintrag verarbeiten (hier also jede datei Kopieren). Durch das Zuweisen eines Wertes unmittelbar vor oder nach dem copieren wird so die If Bedingung nur einmal erfüllt und nur eine Datei wird kopiert.
miniversum