Batch Alle Ordner in einem Ornder welche mit Namenanfang beginnen kopieren

o0Julia0o

Commander
Registriert
Dez. 2012
Beiträge
2.727
hey, ich kopiere mir mit einer Batch-Datei einen Ordner. Das geht so und funktioniert

set Quelle="D:\AlteRechnungen\2017"
xcopy /e /i /h /r /y %Quelle% SAVES\%DATE%\

Jetzt möchte ich die Quelel so abändern, dass alle Ordner im Ordner D:\AlteRechnungen\ welche mit 2017 beginnen kopiert werden.

Also z.B.:
D:\AlteRechnungen\2017_8_1
D:\AlteRechnungen\ 2017_12_2

Wie muss ich die Quelle dazu abändern? So geht es nicht:
set Quelle="D:\AlteRechnungen\2017*"
 
  • Gefällt mir
Reaktionen: o0Julia0o
Dann erscheint:
Nicht genügend Arbeitsspeicher
0 Datei(en) kopiert

Dabei gibt es für den Test dort nur 2 Ordner welche mit 2017 beginnen. Und die sind auch nur wenige MB klein.

bei: robocopy %Quelle% "SAVES\%DATE%\" /MIR
sagt er mir: Ziel wäre: E:\Sicherungen\SAVES\09.10.2022" \MIR\

Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.

Er kann natürlich auf solch einen Dateinamen nicht zugreifen. "MIR" soll ja nur ein Schalter sein. Er versteht es aber als Teil des Dateipfades. Wenn ich die Anführungszeichen um "SAVES\%DATE%\" weglasse, dann kopiert er zwar, jedoch kann der Pfad dann keine Leerstelle enthalten, wie z.B. SAVE S\%DATE%\
 
Zuletzt bearbeitet:
Code:
Testdatei die du versuchen kannst.Pfade müssen angepasst werden.

setlocal ENABLEDELAYEDEXPANSION

set "quelle=E:\tempp"
set "ziel=E:\tempp\xxxxxxxxxxxxxxxx"

for /f "tokens=* delims=" %%g IN ('dir /B /AD /TC /O-D "%quelle%\*es*"') DO @(
xcopy /e /i /h /r /y "!quelle!\%%g" "!ziel!\%%g\")

pause

end

Das *es* ist der Eintrag für den Suchbegriff.
 

Anhänge

  • test.jpg
    test.jpg
    121,6 KB · Aufrufe: 133
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: o0Julia0o
Also easyRobocopy kann das auch nicht:
2022-10-10 18_42_25-EasyRoboCopy.png

Soblad eine Leerstelle im Verzeichnisnamen ist, kommt EasyRobocopy nicht mehr klar(das Verzeichnis "Save s" existiert testweise. So sieht der Code aus, den easyrobocopy ausgibt:
robocopy D:\AlteRechnungen ""SAVE S\%DATE%\""

Aber auch so funktioniert es nicht:
D:\AlteRechnungen "SAVE S\%DATE%\"
so ebenfalls nicht:
D:\AlteRechnungen SAVE S\%DATE%\

Die Variante von hybirdlite muss man so abändern:
Code:
setlocal ENABLEDELAYEDEXPANSION

set quelle="E:\tempp"
set ziel="E:\tempp\xxxxxxxxxxxxxxxx"

for /f "tokens=* delims=" %%g IN ('dir /B /AD /TC /O-D "%quelle%\*es*"') DO @(
xcopy /e /i /h /r /y "!quelle!\%%g" "!ziel!\%%g\")

pause

end
Sonst machst sie gar nichts. Ein Leerzeichen darf im Zielpfad aber dennoch nicht sein. Und was noch ein Problem ist, dass die Ordner in E:\tempp nicht leer sein dürfen, sonst wird der leere Ordner auch nicht in der Sicherung erstellt. Das sollte aber so sein.

Im Zuge der Recherche habe ich jetzt erfahren, dass Robocopy aber mit größeren Dateien umgehen kann. Wer eine Variante mit Robocopy kennt - gerne hier mal posten.
 
Zuletzt bearbeitet:
Habe es abgeändert ausprobiert.Bei mir funktioniert es.
Trotz Leerzeichen im Zielpfad und leerer Ordner.

Bei dir wären die Pfade wohl zum Beispiel so, oder wie du sie hast.....
Statt dem "es" trägst du "2017" ein.

set Quelle=""D:\AlteRechnungen\2017""
set ziel=""E:\Sicherungen\SAVES""
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: o0Julia0o
Das funktioniert. Jedoch kurioserweise nicht zuverlässig. Manchmal sichert er alle Ordner welche mit den Buchstaben zwischen den Sternchen stehen. Manchmal nur einen Ordner. Ich habe 2 Ordner welche so beginnen. Aber wie gesagt, manchmal wird nur der eine kopiert.

Jetzt habe ich herausgefunden, wann das der Fall ist. Mein Ziel lautet:
set ziel=""E:\Sicherungen\SAVES\%Date%""
Wenn ich nun den Datumsordner lösche, vor Ausführung der Batch, dann wird nur ein Sternchen-Ordner gesichert. Wenn ich nur die/den gesicherten Sternchen-Ordner lösche, dann werden alle Sternchen-Ordner gesichert. Was natürlich schlecht ist, da das aktuelle Datum erst beim Starten der Batch hinzugefügt wird.
 
Zurück
Oben