Robocopy fichier de transfert et non dossier

99

J'essaie d'utiliser robocopypour transférer un seul fichier d'un emplacement à un autre mais robocopysemble penser que je spécifie toujours un dossier. Voici un exemple:

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

Mais je reçois cette erreur à la place:

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

(notez le \à la fin de transfer_this.txt)

Mais si je le traite comme un dossier entier:

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

Cela fonctionne mais je dois ensuite tout transférer dans le dossier.

Comment puis-je transférer un seul fichier avec robocopy?

Kevin Panko
la source
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

Réponses:

129

Voir: Robocopy /?

Utilisation: source de ROBOCOPY [fichier [fichier] ...] [options]

robocopy c:\folder d:\folder transfer_this.txt
KPWINC
la source
Fwiw, du moins sur Win2003: citer les chemins de répertoire semble faire hic.
samsmith
1
@samsmith J'ai vu le hoquet quand vous avez un \ avant le dernier mot (par exemple: ROBOCOPY "c: \ dossier1 \" c: \ dossier2 ne fonctionnera pas mais: ROBOCOPY "c: \ dossier1" c: \ dossier2 ne fichier je pense que c'est un texte chose échapper.
Mike Goatly
1
@ MikeGoatly Excellent point. Robocopy n'aime pas trailer \. Il souhaite que vous nommiez les répertoires en tant que "noms" et n'implique en aucune manière qu'il accepte autre chose qu'un répertoire.
samsmith
19

Selon l'article de Wikipedia sur Robocopy :

Copieur à dossier, pas copieur de fichier

La syntaxe de Robocopy est très différente des commandes de copie standard, car elle accepte uniquement les noms de dossier comme arguments source et cible. Les noms de fichier et les caractères génériques (tels que *.*) ne sont pas des arguments source ou de destination valides. Les fichiers peuvent être sélectionnés ou exclus à l'aide de l'argument de filtrage optionnel de fichiers. Les fichiers de fichiers ne peuvent faire référence qu'aux noms de fichiers relatifs aux dossiers déjà sélectionnés pour la copie. Les noms de chemin complets ne sont pas pris en charge.

Par exemple, pour copier le fichier foo.txtdu répertoire c:\bardans c:\baz, vous pouvez utiliser la syntaxe suivante:

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

Adrian De Leon
la source
Une chose que j'ai remarquée. Si C: \ bar contient des dossiers et que l'option / e a été ajoutée. Il va recréer tous les dossiers sans fichiers. Je suppose que puisque le fichier foo.txt agit comme un filtre, il est impossible de trouver des fichiers dans ces dossiers et vous conservez des dossiers vides. C'est pourquoi les dossiers vides sont créés.
Donny V
1

Essayez d'insérer un espace avant la destination, comme ceci:

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

remarquez l'espace après la destination "dossier" z:.

utilisateur296831
la source
3
Cela n'a pas fonctionné pour moi, j'ai dû suivre les instructions de @ KPWINC et laisser le nom du fichier en dehors du chemin source.
Influent
3
Ceci est une réponse troll? Essayé et ne fonctionne pas (il ne semble pas non plus que cela aurait fonctionné).
Pacerier
-4

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

Vallée
la source
Nom du fichier de destination de la source Robocopy
Dale
6
Une commande sans explication n'est pas une réponse utile.
Kasperd