robocopy transfer dosyası ve klasör değil


99

robocopyTek bir dosyayı bir konumdan diğerine aktarmak için kullanmaya çalışıyorum ancak robocopyher zaman bir klasör belirttiğimi düşünüyor gibi görünüyor. İşte bir örnek:

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

Ancak bunun yerine bu hatayı alıyorum:

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

( \sonundaki notu not edin transfer_this.txt)

Ama bir klasörün tamamı gibi davranırsam:

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

Çalışıyor ama sonra klasördeki her şeyi aktarmam gerekiyor.

Tek bir dosyayı yalnızca ile nasıl aktarabilirim 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

Yanıtlar:


129

Görmek: Robocopy /?

Kullanım: ROBOCOPY kaynak hedefi [dosya [dosya] ...] [seçenek]

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

fwiw, en azından win2003'de: Dizin yollarından alıntı yapmak onu zorlaştırıyor gibi görünüyor.
samsmith,

1
@ samsmith kapanış teklifinden önce bir \ 'niz olduğunda hıçkırık gördüm (örneğin: ROBOCOPY "c: \ folder1 \" c: \ folder2 dosyası işe yaramaz ancak: ROBOCOPY "c: \ folder1" c: \ folder2 bir metin kaçan şey olduğunu
umuyorum

1
@MikeGoatly Mükemmel nokta. Robocopy takip etmekten hoşlanmıyor \. Dizinleri "adlar" olarak adlandırmanızı ister ve bir dizin dışındaki herhangi bir şeyi kabul ettiği anlamına gelmez.
samsmith

19

Robocopy hakkındaki Wikipedia makalesine göre :

Klasör fotokopi, dosya fotokopi makinesi değil

Robocopy sözdizimi, yalnızca klasör adlarını kaynak ve hedef argümanları olarak kabul ettiğinden, standart kopyalama komutlarından belirgin şekilde farklıdır. Dosya adları ve joker karakterleri (örneğin *.*) geçerli kaynak veya hedef argümanları değil. İsteğe bağlı filespec filtreleme argümanı kullanılarak dosyalar seçilebilir veya hariç tutulabilir. Filespecs sadece kopyalama için önceden seçilen klasörlere göre dosya adlarına başvurabilir. Tam nitelikli yol adları desteklenmiyor.

Örneğin, dosyayı kopyalamak için foo.txtdizinden c:\bariçin c:\baz, tek aşağıdaki sözdizimini kullanabilirsiniz:

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


Fark ettim bir şey. C: \ bar'da klasör varsa ve / e seçeneği eklenmiştir. İçinde dosya bulunmayan tüm klasörleri yeniden oluşturur. Foo.txt bir filtre gibi davrandığından ve bu klasörlerdeki ve boş klasörlerindeki dosyaları bulamadığına göre. Boş klasörlerin yaratılmasının nedeni budur.
Donny V

1

Hedeften önce bir boşluk eklemeyi deneyin, şöyle:

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

"klasör" hedefinden sonraki boşluğa dikkat edin z:.


3
Bu benim için işe yaramadı, @ KPWINC'in talimatlarını takip etmek ve dosya adını kaynak yolunun dışında bırakmak zorunda kaldım.
etkilenen

3
Bu bir trol cevabı mı? Denenmiş ve çalışmıyor (işe yarayacak gibi görünmüyor).
Pacerier

-4

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


Robocopy kaynak hedef dosya adı
Dale

6
Açıklamasız bir komut yararlı bir cevap değildir.
kasperd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.