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?

Kevin Panko
quelle
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
KPWINC
quelle
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

Adrian De Leon
quelle
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:.

user296831
quelle
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

Tal
quelle
Robocopy-Quell-Zieldateiname
Dale
6
Ein Befehl ohne Erklärung ist keine nützliche Antwort.
Kasperd