Робокопия передачи файлов, а не папок


99

Я пытаюсь использовать robocopyдля передачи одного файла из одного места в другое, но robocopyмне кажется, что я всегда указываю папку. Вот пример:

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

Но я получаю эту ошибку вместо:

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

(обратите внимание \на в конце transfer_this.txt)

Но если я рассматриваю это как целую папку:

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

Это работает, но тогда я должен передать все в папке.

Как я могу передать только один файл с 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)
Ганк

Ответы:


129

Видеть: Robocopy /?

Использование: ROBOCOPY источник назначения [файл [файл] ...] [параметры]

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

fwiw, по крайней мере на win2003: цитирование путей к каталогам, кажется, делает сбой.
Самсмит

1
@samsmith Я видел сбой, когда у вас есть \ перед закрывающей кавычкой (то есть: файл ROBOCOPY c: \ folder1 \ "c: \ folder2 не будет работать, но: ROBOCOPY" c: \ folder1 "c: \ folder2 файл делает. Я ожидаю, что это текстовая экранировка
Майк Гоатли

1
@MikeGoatly Отличный момент. Робокопия НЕ любит трейлинг \. Он хочет, чтобы вы называли каталоги «именами», и не хочет подразумевать, что он принимает что-либо, кроме каталога.
Самсмит

19

Согласно статье в Википедии о Robocopy :

Папка-копир, а не файл-копир

Синтаксис Robocopy заметно отличается от стандартных команд копирования, поскольку он принимает только имена папок в качестве аргументов источника и назначения. Имена файлов и символы подстановки (например, *.*) не являются допустимыми аргументами источника или назначения. Файлы могут быть выбраны или исключены с помощью необязательного аргумента фильтрации спецификаций файлов. Спецификации файлов могут ссылаться только на имена файлов относительно папок, уже выбранных для копирования. Полностью определенные имена путей не поддерживаются.

Например, чтобы скопировать файл foo.txtиз каталога c:\barв c:\baz, можно использовать следующий синтаксис:

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


Я заметил одну вещь. Если в C: \ bar есть какие-либо папки и добавлена ​​опция / e. Он воссоздает все папки без файлов в них. Я полагаю, что поскольку foo.txt действует как фильтр, он не может найти файлы в этих папках и ваши пустые папки. Вот почему создаются пустые папки.
Донни V

1

Попробуйте вставить пробел перед пунктом назначения, например так:

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

обратите внимание на пробел после места назначения «папка» z:.


3
Это не сработало для меня, я должен был следовать инструкциям @ KPWINC и оставить имя файла вне исходного пути.
втекающий

3
Это тролль ответ? Пробовал и не работает (и не похоже, что это сработало бы).
Pacerier

-4

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


Robocopy источник назначения имя файла
Дейл

6
Команда без объяснения не является полезным ответом.
Касперд
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.