file di trasferimento robocopy e non cartella


99

Sto cercando di utilizzare robocopyper trasferire un singolo file da una posizione a un'altra ma robocopysembra pensare di specificare sempre una cartella. Ecco un esempio:

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

Ma ottengo questo errore invece:

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

(nota \alla fine di transfer_this.txt)

Ma se lo tratto come un'intera cartella:

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

Funziona ma poi devo trasferire tutto nella cartella.

Come posso trasferire solo un singolo file con 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,

Risposte:


129

Vedere: Robocopy /?

Utilizzo: destinazione sorgente ROBOCOPY [file [file] ...] [opzioni]

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

prima, almeno su win2003: la quotazione dei percorsi delle directory sembra rendere il singhiozzo.
Samsmith,

1
@samsmith L'ho visto singhiozzare quando hai un \ prima della citazione di chiusura (es .: ROBOCOPY "c: \ cartella1 \" c: \ cartella2 non funzionerà ma: ROBOCOPY "c: \ cartella1" c: \ cartella2

1
@MikeGoatly Ottimo punto. A Robocopy NON piace trascinare \. Vuole che tu chiami le directory come "nomi" e non vuole implicare in alcun modo che accetti qualcosa di diverso da una directory.
samsmith,

19

Secondo l'articolo di Wikipedia su Robocopy :

Copiatrice di cartelle, non copiatrice di file

La sintassi di Robocopy è nettamente diversa dai comandi di copia standard, in quanto accetta solo i nomi delle cartelle come argomenti di origine e destinazione. I nomi dei file e i caratteri jolly (come *.*) non sono argomenti di origine o destinazione validi. I file possono essere selezionati o esclusi utilizzando l'argomento di filtro opzionale filespec. Filespecs può fare riferimento solo ai nomi dei file relativi alle cartelle già selezionate per la copia. I nomi dei percorsi completi non sono supportati.

Ad esempio, per copiare il file foo.txtdalla directory c:\barin c:\baz, è possibile utilizzare la sintassi seguente:

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


Una cosa che ho notato. Se C: \ bar contiene delle cartelle e l'opzione / e è stata aggiunta. Verranno ricreate tutte le cartelle senza file. Immagino dal momento che foo.txt si comporta come un filtro e non è stato possibile trovare alcun file in quelle cartelle e mantenere vuote le cartelle. Ecco perché vengono create le cartelle vuote.
Donny V,

1

Prova a inserire uno spazio prima della destinazione, in questo modo:

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

notare lo spazio dopo la "cartella" di destinazione z:.


3
Questo non ha funzionato per me, ho dovuto seguire le istruzioni di @ KPWINC e lasciare il nome del file fuori dal percorso di origine.
influente

3
Questa è una risposta da troll? Ho provato e non funziona (né sembra che avrebbe funzionato).
Pacerier,

-4

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


Nome file destinazione sorgente Robocopy
Dale

6
Un comando senza spiegazione non è una risposta utile.
Kasperd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.