przesłać plik robocopy, a nie folder

99

Próbuję użyć robocopydo przesłania jednego pliku z jednej lokalizacji do drugiej, ale robocopywydaje mi się, że zawsze określam folder. Oto przykład:

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

Zamiast tego pojawia się ten błąd:

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

(zwróć uwagę \na koniec transfer_this.txt)

Ale jeśli traktuję to jak cały folder:

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

Działa, ale potem muszę przenieść wszystko z folderu.

Jak mogę przesłać tylko jeden plik robocopy?

Kevin Panko
źródło
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

Odpowiedzi:

129

Widzieć: Robocopy /?

Użycie: Miejsce docelowe źródła ROBOCOPY [plik [plik] ...] [opcje]

robocopy c:\folder d:\folder transfer_this.txt
KPWINC
źródło
fwiw, przynajmniej na win2003: Wydaje się, że zacytowanie ścieżek do katalogu powoduje problemy.
samsmith
1
@samsmith Widziałem, że czkawka, gdy masz \ przed cytatem zamykającym (tzn .: plik ROBOCOPY "c: \ folder1 \" c: \ folder2 nie działa, ale: ROBOCOPY "c: \ folder1" c: \ folder2 plik ma. Spodziewam się, że jest to kwestia ucieczki tekstu
Mike Goatly,
1
@MikeGoatly Doskonały punkt. Robocopy NIE lubi ciągnięcia \. Chce, abyś nazwał katalogi „nazwami” i nie chce w żaden sposób sugerować, że akceptuje coś innego niż katalog.
samsmith
19

Zgodnie z artykułem Wikipedii na temat Robocopy :

Kopiarka do folderów, a nie kopiarka do plików

Składnia robocopy różni się znacznie od standardowych poleceń kopiowania, ponieważ przyjmuje tylko nazwy folderów jako argumenty źródłowe i docelowe. Nazwy plików i znaki wieloznaczne (takie jak *.*) nie są poprawnymi argumentami źródłowymi lub docelowymi. Pliki można wybierać lub wykluczać za pomocą opcjonalnego argumentu filtrowania według specyfikacji plików. Specyfikacje plików mogą odnosić się tylko do nazw plików odnoszących się do folderów już wybranych do skopiowania. W pełni kwalifikowane nazwy ścieżek nie są obsługiwane.

Na przykład w celu skopiowania pliku foo.txtz katalogu c:\bardo c:\baz, można użyć następującej składni:

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

Adrian De Leon
źródło
Jedną rzecz zauważyłem. Jeśli C: \ bar zawiera jakieś foldery i dodano opcję / e. Odtworzy wszystkie foldery bez plików. Wydaje mi się, że ponieważ foo.txt działa jak filtr i nie mógł znaleźć żadnych plików w tych folderach oraz utrzymywania pustych folderów. Właśnie dlatego tworzone są puste foldery.
Donny V
1

Spróbuj wstawić spację przed miejscem docelowym, na przykład:

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

zauważ spację po docelowym „folderze” z:.

użytkownik296831
źródło
3
Nie działało to dla mnie, musiałem postępować zgodnie z instrukcjami @ KPWINC i pozostawić nazwę pliku poza ścieżką źródłową.
wpływowy
3
To jest odpowiedź trolla? Próbowałem i nie działa (ani nie wydaje się, aby działało).
Pacerier
-4

robocopy P: \ F: \ Dopbox „Microsoft Office.zip” / MT: 128

Dołek
źródło
Docelowa nazwa pliku źródłowego robocopy
Dale
6
Polecenie bez wyjaśnienia nie jest przydatną odpowiedzią.
kasperd