Вопрос: robocopy передать файл, а не папку


Я пытаюсь использовать 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?


87
2017-08-11 22:29


Источник


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


Ответы:


Видеть: Robocopy /?

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

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

113
2017-08-11 22:37



fwiw, по крайней мере, на win2003: Котировки путей к каталогам, похоже, делают его икотой. - samsmith
@samsmith Я видел, что это икота, когда у вас есть \ перед закрывающей кавычки (например: ROBOCOPY "C: \ folder1 \" C: \ folder2 файл не будет работать, но: ROBOCOPY "C: \ folder1" C: \ folder2 файл. Я ожидаю, что это текст, способный убежать - Mike Goatly
@MikeGoatly Отличная точка. Robocopy НЕ нравится trailing \. Он хочет, чтобы вы назвали каталоги «именами» и не хотите каким-либо образом подразумевать, что он принимает что-либо иное, кроме каталога. - samsmith


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

Копир для папки, а не копир

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

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

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


16
2017-08-30 23:47



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


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

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

обратите внимание на пространство  после пункта назначения "папка" z:,


1
2018-06-29 20:37



Это не сработало для меня, я должен был следовать инструкциям @ KPWINC и оставить имя файла вне исходного пути. - influent
Это ответ тролля? Пробовал и не работает (и не похоже, что это сработало бы). - Pacerier


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


-4
2018-06-04 10:31



Имя экземпляра исходного кода Robocopy - Dale
Команда без объяснений не является полезным ответом. - kasperd