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
Please also mark the comments that contributed to the solution of the article
Content-Key: 80321
Url: https://administrator.de/contentid/80321
Printed on: April 25, 2024 at 13:04 o'clock
6 Comments
Latest comment
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