azubi1
Goto Top

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

Content-Key: 80321

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

Printed on: April 25, 2024 at 03:04 o'clock

Member: TuXHunt3R
TuXHunt3R Feb 09, 2008 at 14:00:26 (UTC)
Goto Top
Zu a)

net use X: \\192.11.7.53\sdshare /user:tante tante

Weiss halt nicht, ob das mit der User- und Passwortübergabe auch in einer Samba-Umgebung geht.
Member: miniversum
miniversum Feb 09, 2008 at 19:46:04 (UTC)
Goto Top
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.
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"

miniversum
Member: Azubi1
Azubi1 Feb 10, 2008 at 09:38:45 (UTC)
Goto Top
Hallo
danke für eure hilfe
Also mit die obene befehle binde ich die freigabe (net use X: \\192.11.7.53\sdshare /user:tante tante)
aber mit die unten ( 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")befehle komme ich einefach nicht zu recht kann jemand in einzel schritt eklaren das wahre sehr nett
Mit Freundliche Grüsse
Azubi 1
Member: miniversum
miniversum Feb 10, 2008 at 09:59:56 (UTC)
Goto Top
Hier nochmal mit Kommentar (in einzelnen Teilen):

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
Member: Azubi1
Azubi1 Feb 11, 2008 at 13:15:33 (UTC)
Goto Top
hallo
sieht die ganze befehl dann so oder?
net use X: \\192.11.7.53\sdshare /user:tante tante
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"

mit freundliche grüsse
Azubi1
Member: miniversum
miniversum Feb 11, 2008 at 14:28:43 (UTC)
Goto Top
Ja genau.
Besser ist noch das Copy ungefär so:
copy "%%~fi" "e:\gp_logs\d2"
Dadurch wird der volle dateinamen beim kopieren benutzt.