Batch die Von C:\Test nach aktuelles Verzeichnis\SAVE alles kopiert samt Unterverzeichnissen

o0Julia0o

Commander
Registriert
Dez. 2012
Beiträge
2.737
hi, ich möchte vom Ordner:
C:\Test in den aktuellen Ordner(da wo sich die Batch befindet) \SAVES alles von C:\Test kopieren, samt aller Unterverzeichnise und Dateien(egal ob unsichtbar oder schreibgeschützt, Systemdatei etc.).

Der Ordner SAVES soll als Ordner erstellt werden, wenn er nicht da ist. Und alles darin ohne Nachfrage überschrieben werden. Mein bescheidener Ansatz:

@Echo off
xcopy C:\Test D:\SAVES /s
exit

Es wird dann jedoch gefragt, ob SAVES ein Verzeichnis ist. Und ich gebe SAVES ja absolut an. Das soll jedoch relativ geschehen. Noch besser wäre es natürlich, wenn unter dem Ordnerbaum SAVES ein neuer Ordner erstellt werden würde mit dem aktuellen Datum. Und erst dorthinein kämen die Saves. Dann würde man nichts überschreiben. Und man hätte noch ein paar alte Sicherungen, die bei Bedarf gelöscht werden dann. Immer wenn 10 Sicherungen da sind, z.B. löscht man halt immer die älteste.

Gibt es da eine Möglichkeit?
 
1.) https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/xcopy

2.) Wenn SAVES relativ angesprochen werden soll, dann mach das doch einfach? Muss die Batch halt entsprechend positioniert sein, bzw. der relative Pfad entsprechend geeignet sein.

3.) Bzgl. Unterordner: Entsprechend vor dem Kopiervorgang exakt so ein Verzeichnis mit deiner Batch Datei erstellen und dieses dann als Zeil verwenden. Entsprechende Ausgaben liefern dir time oder date.

4.) "Egal ob Systemdateien" ist so egal nicht. Du musst schon sicherstellen, dass die Batch Datei entsprechende Rechte hat, auf alles zuzugreifen. Das wäre ja noch schöner, wenn irgend eine Batch von sonstwo mal eben auf alle Dateien zugreifen dürfte.
 
  • Gefällt mir
Reaktionen: o0Julia0o
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: o0Julia0o
o.k., danke euch.

Jetzt klappt alles. Ich frage mich nur, warum der jetzt nicht mehr fragt, ob der letzte Pfadteil ein Verzeichnis oder eine Datei ist???

@Echo off
rem set "DATUMPFAD=%DATE%"
rem mkdir SAVES\%DATE%
xcopy /e /i /h /r /y C:\Test SAVES\%DATE%
exit

Kann man überprüfen ob C:\Test extistiert. Und wenn nein, dann eine Warnung ausgeben? Also in etwa so etwas:
@Echo off
if exist "C:\Test"
xcopy /e /i /h /r /y C:\Test SAVES\%DATE%
else
echo Warnung
exit

ah, hab schon :) Falls es Jemanden noch interessiert Mal:
@Echo off
IF EXIST "C:\Test" goto SAVING
echo Warnung
exit
:SAVING
xcopy /e /i /h /r /y C:\Test SAVES\%DATE%
exit
 
Zuletzt bearbeitet:
Hi,

Du verwendest die Schalter "/e /i /h /r /y" ohne zu verstehen was die tun? :D

/I Falls Ziel nicht vorhanden ist und mehrere Dateien kopiert werden, nimmt XCOPY an, dass das Ziel ein Verzeichnis ist.

Nun denk noch schnell darueber nach vollstaendige Pfadangaben beim xcopy zu verwenden und an das Ende der Zeile einen \ zu setzen. Das macht das Ganze nicht so abhaengig vom Speicherort der Batch-Datei.

Code:
@Echo off
IF EXIST "C:\Test" goto SAVING
echo Warnung
exit
:SAVING
xcopy /e /i /h /r /y C:\Test D:\SAVES\%DATE%\
exit

BFF
 
Danke Dir. Du denkst ja schon in Computersprache "darueber & vollstaendige" ;)
Gerade das mit dem realtiven ist ja von mir gewollt.
Wozu dient das \ am Ende?

Und wie bekomme ich das nun hin, wenn nur eine Datei kopiert werden soll? Trotzdem soll SAVES\%DATE% immer ein Verzeichnis sein - also als solches ohne Nachfrage der Batch angesehen werden.
 
Bitte.

Ich denke nicht in Computersprache. Ich habe mir einfach vor Jahren angewoehnt dem daemlichen Umlautproblem aus dem Weg zu gehen indem ich sie nicht tippe. War auch damals einfacher in englischsprachigen Chat's die aus Umlauten eh nur Musekohl machten.

Abgesehen davon hat meine momentane Tastatur auch keine gar keine Umlaute. :evillol:

Zu Deiner Frage:
1. \ sagt dem XCOPY das es immer ein Verzeichnis annehmen soll, ist fast das /i
2. Wenn nur eine Datei... Probiere es aus.

BFF
 
Zuletzt bearbeitet:
Doofe Frage, weil ich gerade etwas verwirrt bin:
Du hast da Code aufgelistet, wo DATE gesetzt wird, aber "rem" davorgeschrieben. Dir ist schon bewusst, dass das dann ein Kommentar ist, d.h. die Zeile ist ohne Funktion?
 
jo danke, weiß ich. Ich hatte das zuvor so gemacht, weil ich dachte, das wäre wichtig.

Das mit dem \ ist nu notwendig, wenn die Quelle kein Ordner ist(selbst wenn er leer ist). Sondern eine Datei, mehr als eine Datei geht ja auch nicht mit dem Befehl. Und dann würde er fragen obs Verzeichnis oder Datei sein soll das Ziel. Durch den \ wird das zum Verzeichnis automatisch. Wird aber ein Ornder kopier, wie bei mir - ist es völlig egal.
 
Zurück
Oben