(x)copy: Quelle mit Unterverzeichnisse, Ziel ohne Unterverzeichnisse

Mr. Brooks

Lt. Commander
Registriert
Aug. 2011
Beiträge
1.441
Hallo,

ich möchte regelmäßig einige Dateien von meiner Festplatte auf den USB-Speicher meiner Fritzbox kopieren. Auf dem PC gibt es da Unterverzeichnisse, die auf der Fritzbox ignoriert werden sollen. Die Dateien in den Unterverzeichnissen sollen mit allen anderen Dateien in den gleichen Ordner auf der Fritzbox kopiert werden. Beispiel:

Quelle:
d:\ordner\datei1.ext
d:\ordner\datei2.ext
d:\ordner\unterordner\datei3.ext

Ziel:
d:\ordner\datei1.ext
d:\ordner\datei2.ext
d:\ordner\datei3.ext

Einfach als Quelle den Pfad und dann *.* eingeben reicht nicht. Bei xcopy kenne ich nur die Möglichkeit die Unterordner mit zu kopieren. Ich könnte natürlich einfach eine weitere Zeile anlegen mit dem Pfad zum Unterordner, die Zahl der U-Ordner können sich aber ändern udn ich müsste dann immer die Datei anpassen. Doppelte Dateinamen kann es aber nicht geben. Jemand eine Idee?

Mr. Brooks
 
guck dir mal den befehl forfiles an . damit kannst du dir sowas zusammen basteln.
 
per For-Schleife:

For /F "Tokens=* Delims=" %i IN ('Dir /B /S C:\Ordner\*.*') DO Copy "%~i" D:\Ordner\%~nxi
 
Zuletzt bearbeitet:
xcopy /e C:\Ordner\*.* D:\Ordner\

C wäre die Quelle D das Ziel

Sorry quatsch... legt ja Unterverzeichnisse mit an
 
Zuletzt bearbeitet:
frogger9 schrieb:
per For-Schleife:

For /F "Tokens=* Delims=" %i IN ('Dir /B /S C:\Ordner\*.*') DO Copy "%~i" D:\Ordner\%~nxi

Hab die Pfade durch meiuen Pfade ersetzt, es passiert aber nichts. Normalerweise hab ich da immer Pause unter an die Batch eingefügt udn erhielt eine Nachricht was nicht lief, hier blinktz das Eingabefenster nur kurz auf und ist wieder weg. Führe ich den Befehl direkt in der Eingabeaufforderung aus, kommt das hier:


E:\>For /F "Tokens=* Delims=" %i IN ('Dir /B /S E:\__FERTIG\*.*') DO Copy "%~i"
E:\xNeu\%~nxi

E:\>Copy "E:\__FERTIG\Neuer Ordner" E:\xNeu\Neuer Ordner
Syntaxfehler.

E:\>Copy "E:\__FERTIG\Neues Textdokument.txt" E:\xNeu\Neues Textdokument.txt
Syntaxfehler.

E:\>Copy "E:\__FERTIG\Neuer Ordner\AviSynth Script (neu).avs" E:\xNeu\AviSynth S
cript (neu).avs
Syntaxfehler.
 
in der Batch braucht man doppelte Prozentzeichen.

Code:
For /F "Tokens=* Delims=" %%i IN ('Dir /B /S C:\Ordner\*.*') DO Copy "%%~i" D:\Ordner\%%~nxi

Der Syntaxfehler könnte wegen der Leerzeichen im Datei-/Ordnernamen auftreten.

Code:
For /F "Tokens=* Delims=" %%i IN ('Dir /B /S /A-D C:\Ordner\*.*') DO Copy "%%~i" "D:\Ordner\%%~nxi"

cmdcopy.png

Damit keine Ordner mitkopiert werden, muss man den Dir-Befehl anpassen.
 
Zuletzt bearbeitet: (Bild eingefügt)
OK, so geht es.

Was macht denn "A-D"? /D legt fest, dass nur mit jüngere Dateien überschrieben werden darf. Gibt es eine Möglichkeit Überschreiben immer auszuschließen?
 
/A-D lässt Verzeichnisse aussen vor bei DIR.

Überschreiben auszuschliessen muss man im Copy Befehl anpassen. Weder Xcopy noch Copy haben dafür aber eine brauchbare Option, deshalb auf Robocopy wechseln.

http://de.wikipedia.org/wiki/Robocopy
 
Mir hat sich gerade noch ein anderes Problem ergeben: Die Umlaute werdemn nicht erkannt. Das klappte bisher super mit chcp 1252. Geht jetzt aber nicht mit einem ü drin. War bisher nie ein Problem.
 
Ich muss das Thema nochmal hoch holen.

Ich hab jetzt versucht das Überschreiben schon existierender Dateien zu unterbinden. Ändere ich den copy-Befehl ab in "copy /D" ohne Angabe eines Datums werden dennoch alle schon existierenden Dateien erneut kopiert. Mit "xcopy /D /Y" werden einige überschrieben, ich habe hier aber keine Logik erkannt, welche überschrieben werden und welche nicht. Zuerst dachte ich, da im CMD-Fenster die Umlaute nicht korrekt angezeigt werden er da einen Untershcied macht. Es werden aber auch Dateinamen ohne Umlaute mal kopiert und mal nicht.

robocopy sollte eigentlich gehen mit /IS nach Quell- und Zielverzeichnis, aber da kommt

2015/03/18 16:57:56 FEHLER 123 (0x0000007B) Zugriff auf Quellverzeichnis D:\pfad\zur\quelle\datei.pdf\
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
 
"Fehler 123" bei Robocopy deutet auf einen Fehler im Dateisystem hin. Auftreten kann das bei Verzeichnissen und Dateien, die nicht den Vorgaben des NTFS entsprechen.

In deinem Fall dürfte es allerdings an der übergebenen Syntax des For-Befehls liegen.

Das mit den Umlauten ä,ö,ü ist allerdings kein Problem, solange es sich auf lokale Datenträger bezieht. Bei anderen Dateisystemen wie DFS/ Samba Shares kann es dabei aber zu Problemen mit der CMD kommen.
 
Was muss man am FOR ändern? ist pfad nicht gleich pfad?
Ergänzung ()

Hab jetzt nochmal ein wenig probiert, auch mal ohne diese For-Schleife. Scheinbar will robocopy keine " " um die Pfade wenn diese keine Leerzeichen enthalten. Es kam immer dieser Sytraxfehler. Das klappte aber mit Leerzeichen wenn ich " " verwendet habe. Mit der For-Schleife hat er Probleme, da zwar die Ordner keine Leerzeichen enthalten, die Dateinamen aber schon. Er nimmt dann immer das 2. Wort des Dateinamen als zusätzliche Option an, das wäre dann eine Liste zu kopierender Dateien. In etwas so:

Es soll kopiert werden: d:\pfad\zur\quelle\quell datei.ext

robocopy sucht dann nach "datei.ext" im Pfad "d:\pfad\zur\quelle\quell".

Ich hab gerade keien Vorstellung was man da anders machen müsste.
 
Zurück
Oben