Robocopy Transfer-Datei und nicht Ordner


99

Ich versuche, robocopyeine einzelne Datei von einem Speicherort an einen anderen robocopyzu übertragen, glaube jedoch, immer einen Ordner anzugeben. Hier ist ein Beispiel:

robocopy "c:\transfer_this.txt" "z:\transferred.txt"

Aber ich bekomme stattdessen diesen Fehler:

2009/08/11 15:21:57 ERROR 123 (0x0000007B) Accessing Source Directory c:\transfer_this.txt\

(Beachten Sie das \am Ende von transfer_this.txt)

Aber wenn ich es wie einen ganzen Ordner behandle:

robocopy "c:\folder" "z:\folder"

Es funktioniert aber dann muss ich alles in den Ordner übertragen.

Wie kann ich nur eine einzige Datei mit übertragen robocopy?


def copyFile(fromLocation,toLocation,big=False): print("copy file from " + fromLocation + " to " + toLocation) if big: iFind=fromLocation.rfind('\\') fromLocation1 = fromLocation[: (iFind+1)] fileName=fromLocation[iFind+1 :] toLocation1 = toLocation[:(toLocation.rfind('\\')+1)] strcmd="robocopy "+fromLocation1+" "+toLocation1+" "+fileName print(strcmd) os.system(strcmd) else: shutil.copy2(fromLocation,toLocation)
Gank

Antworten:


129

Sehen: Robocopy /?

Verwendung: ROBOCOPY source destination [Datei [Datei] ...] [Optionen]

robocopy c:\folder d:\folder transfer_this.txt

fwiw, zumindest unter win2003: Verzeichnispfade in Anführungszeichen zu setzen, scheint Schluckauf zu verursachen.
Samsmith

1
@samsmith Ich habe ein Schluckauf gesehen, wenn Sie ein \ vor dem schließenden Anführungszeichen haben (dh: ROBOCOPY "c: \ folder1 \" c: \ folder2-Datei funktioniert nicht, aber: ROBOCOPY "c: \ folder1" c: \ folder2 Ich
gehe davon aus,

1
@MikeGoatly Ausgezeichneter Punkt. Robocopy mag es NICHT, \ zu kopieren. Sie möchten, dass Sie die Verzeichnisse als "Namen" bezeichnen und in keiner Weise implizieren, dass sie etwas anderes als ein Verzeichnis akzeptieren.
Samsmith

19

Laut dem Wikipedia-Artikel über Robocopy :

Ordnerkopierer, nicht Dateikopierer

Die Robocopy-Syntax unterscheidet sich deutlich von den Standard-Kopierbefehlen, da nur Ordnernamen als Quell- und Zielargumente akzeptiert werden. Dateinamen und Platzhalterzeichen (z. B. *.*) sind keine gültigen Quell- oder Zielargumente. Dateien können mit dem optionalen Argument zum Filtern nach Dateispezifikationen ausgewählt oder ausgeschlossen werden. Dateispezifikationen können nur auf die Dateinamen verweisen, die sich auf die bereits zum Kopieren ausgewählten Ordner beziehen. Vollqualifizierte Pfadnamen werden nicht unterstützt.

Zum Beispiel, um die Datei zu kopieren foo.txtaus dem Verzeichnis c:\barzu c:\baz, so könnte man die folgende Syntax verwenden:

robocopy c:\bar c:\baz foo.txt


Eines ist mir aufgefallen. Wenn C: \ bar Ordner enthält und die Option / e hinzugefügt wurde. Es werden alle Ordner neu erstellt, in denen sich keine Dateien befinden. Ich schätze, da die foo.txt wie ein Filter wirkt und keine Dateien in diesen Ordnern finden konnte und Sie leere Ordner behalten. Deshalb werden die leeren Ordner erstellt.
Donny V

1

Versuchen Sie, ein Leerzeichen vor dem Ziel einzufügen:

robocopy "c:\transfer_this.txt" "z: \this.txt" 

Beachten Sie das Leerzeichen nach dem Ziel "Ordner" z:.


3
Das hat bei mir nicht funktioniert, ich musste den Anweisungen von @ KPWINC folgen und den Dateinamen außerhalb des Quellpfads belassen.
einflussreiche

3
Dies ist eine Antwort der Trolle? Versucht und funktioniert nicht (noch scheint es, als hätte es funktioniert).
Pacerier

-4

robocopy F: \ F: \ Dopbox "Microsoft Office.zip" / MT: 128


Robocopy-Quell-Zieldateiname
Dale

6
Ein Befehl ohne Erklärung ist keine nützliche Antwort.
Kasperd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.