masterschlumpf
Goto Top

Batch - Datei Kopieren und neue Datei erzeugen

Hallo Gemeinde,

bitte entschuldigt, dass meine Batch-Kenntnisse begrenzt sind.

Ich möchte eine Datei zum Sichern auf ein Netzlaufwerk kopieren.
Die Datei soll mittels eines geplanten Task die Datei C:\Programme\meinProgramm\Daten.mdb nach S:\Sicherung\meinProgramm\ kopieren. Das geht wunderbar mit xcopy. jetzt aber meine Schwierigkeit: Ist es möglich, dass bei jedem Kopiervorgang eine neue Datei im Ordner erzeugt wird? Also...

S:\Sicherung\meinProgramm\
Daten_201502.mdb
Daten_201501.mdb
Daten_201431.mdb
usw.

Dazu kommt noch, dass ich davon möglichst wenig sehen will. Soweit ich weiß muss man dann @echo off davor schreiben und ich hätte es auch gern, dass keine Abfragen gestellt werden und dass sich das Fenster anschlißend selbstständig schließt.

Ist das möglich und wenn ja wie?


Zweite Frage (für mich zur Info). Wie heißt der xcopy Befehl um die Datei am Zielort zu überschreiben?

Vielen Dank für Eure Hilfe.
Ich wünsche allen ein schönes Wochenende

Grüße
Alex

Content-Key: 264751

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

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

Member: hajowe
Solution hajowe Feb 27, 2015, updated at Mar 03, 2015 at 15:43:04 (UTC)
Goto Top
Hi Alex

@Echo off

set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%

set Quelle="C:\Program FILES\Daten.mdb"  
set Ziel="d:\Daten%jahr%%Monat%%Tag%.mdb"  


xcopy /Y %Quelle%  %Ziel% 

Variablen setzen (set)
Quelle Ziel zuweisen
Tip --> xcopy /? zeigt dir alle möglichen Parameter mit Erklärung


Gruß
Hajowe
Member: Dilbert-MD
Dilbert-MD Feb 27, 2015 at 14:32:39 (UTC)
Goto Top
Hallo

Bleibt noch die Frage, was passiert, wenn die Datei in Benutzung ist.

Wie wäre es mit einem Sync-Tool á la DirSync mit entsprechenden Kommandozeilenparametern.

Gruß
Holger
Member: MasterSchlumpf
MasterSchlumpf Mar 03, 2015 at 15:44:57 (UTC)
Goto Top
Hallo Hajowe,

vielen Dank für Deinen Code. Genauso wollte ich es haben.

Bei mir erscheint immer die Abfrage, ob die Zieldatei eine Datei oder ein Verzeichnis ist. Kann man dies festlegen, sodass die Abfrage nicht mehr erscheint?

Grüße
Alex
Member: hajowe
Solution hajowe Mar 03, 2015, updated at Mar 04, 2015 at 15:14:54 (UTC)
Goto Top
Hallo Alex


Du kannst mal die Zeile so setzen
set Ziel="d:\Daten%jahr%%Monat%%Tag%.mdb\"

Den Backslash dahinter, dann sollte Xcopy wissen das es eine Datei ist.

Alternativ:
Wenn ich recht verstehe willst du immer nur eine Datei kopieren. Hatte es vor überlesen.
Dann nimm den einfachen copy statt xcopy. Parameter identisch.

Xcopy bietet sich ehr an wenn du mehrer Dateien oder Ordner mit Unterordner kopieren willst.,

Ich persönlich bevorzuge robocopy . Das ist der neuere Befehl

Gruß
Member: MasterSchlumpf
MasterSchlumpf Mar 04, 2015 at 15:18:25 (UTC)
Goto Top
Hallo zusammen,

vielen Dank für Deine Hilfe, Hajowe.
Das funktioniert genauso wie ich es haben möchte.

Jetzt würde ich gern noch etwas intergrieren.
Da die Sicherungen nicht gelöscht werden, wird das Verzeichnis irgendwann mit alten Dateien vollgemüllt. Gibt es eine Möglichkeit wie ich mittels der gleichen Batch-Datei alle Dateien die z.B. älter als einen Monat sind lösche?

Beste Grüße
Alex
Member: hajowe
hajowe Mar 04, 2015 at 15:36:48 (UTC)
Goto Top
Hi Alex

Das mit dem Datum berechnen im Bat ist nicht trivial und eher kompliziert.

Ich würde hier einen Trick anwenden:
mit Robocopy die Daten zunächst in ein Temporär genutzten Ordner verschieben und anschliessen diesen löschen.

Hier mal ein Beispiel aus : http://www.sbspraxis.de/server/srv007/srv_007.html


Erstellen einer Batchdatei zum Bereinigen der Standard Log Verzeichnisse

Da Robocopy selbst keine Option hat um Dateien mit einem bestimmte Alter zu löschen,
sind zwei Schritte notwendig um unser Vorhaben auszuführen.

Der Befehl:

robocopy C:\WINDOWS\system32\LogFiles D:\LOGArchiv /E /R:1 /W:10 /MOV /MINAGE:30

verschiebt alle Dateien die älter als 30 Tage sind aus dem Verzeichnis
C:\WINDOWS\system32\LogFiles in das Verzeichnis D:\LOGArchiv. Dabei werden auch die Unterverzeichnisse berücksichtigt.

Bitte beachten Sie, dass der Befehl in eine einzige Zeile geschrieben werden muss. Aus Platzgründen kann hier die gesamte Befehlszeile nur in zwei Zeilen dargestellt werden.

Anschließend werden sie dort mit dem Befehl

rd d:\LOGArchiv /s /q

gelöscht.

Die verwendeten Optionen im Einzelnen:


/E kopiert alle Unterverzeichnisse
/R:n Anzahl der Wiederholungsversuche, falls beim Kopieren
ein Fehler entsteht (z.B. geöffnete Dateien)

/W:n Wartezeit in sek. zwischen den Wiederholungsversuchen
/MOV Verschiebt die ausgewählten Dateien aus dem Quellverzeichnis in das Zielverzeichnis

/MINAGE n Dateien ausschließen, die jünger als n Tage sind. Diese Zeitangabe bezieht sich auf das Systemdatum.

Alle Optionen zu ROBOCOPY.EXE erhalten Sie über das Hilfe- und Supportcenter zum Windows Resource Kit.


Gruß
Hajo We