arquivo de transferência robocopy e não pasta

99

Estou tentando usar robocopypara transferir um único arquivo de um local para outro, mas robocopyparece achar que estou sempre especificando uma pasta. Aqui está um exemplo:

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

Mas eu recebo este erro:

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

(observe o \no final de transfer_this.txt)

Mas se eu tratá-lo como uma pasta inteira:

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

Funciona, mas então eu tenho que transferir tudo na pasta.

Como posso transferir apenas um único arquivo robocopy?

Kevin Panko
fonte
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 24/05

Respostas:

129

Vejo: Robocopy /?

Uso: destino de origem ROBOCOPY [arquivo [arquivo] ...] [opções]

robocopy c:\folder d:\folder transfer_this.txt
KPWINC
fonte
fwiw, pelo menos no win2003: citar caminhos de diretório parece torná-lo soluço.
samsmith
1
@samsmith Já vi soluço quando você tem um \ antes da citação de fechamento (ou seja: ROBOCOPY "c: \ folder1 \" arquivo c: \ folder2 não funciona, mas: ROBOCOPY "c: \ folder1" c: \ folder2 Espero que seja algo de escape de texto #
Mike Goatly
1
@MikeGoatly Excelente ponto. Robocopy NÃO gosta de arrastar \. Ele deseja que você nomeie os diretórios como "nomes" e não quer implicar de forma alguma que aceite algo diferente de um diretório.
samsmith
19

De acordo com o artigo da Wikipedia sobre Robocopy :

Copiadora de pasta, não copiadora de arquivo

A sintaxe da robocópia é muito diferente dos comandos de cópia padrão, pois aceita apenas nomes de pastas como argumentos de origem e destino. Nomes de arquivos e caracteres curinga (como *.*) não são argumentos válidos de origem ou destino. Os arquivos podem ser selecionados ou excluídos usando o argumento de filtragem opcional filespec. As especificações de arquivo podem se referir apenas aos nomes de arquivos relativos às pastas já selecionadas para cópia. Nomes de caminho totalmente qualificados não são suportados.

Por exemplo, para copiar o arquivo foo.txtdo diretório c:\barpara c:\baz, pode-se usar a seguinte sintaxe:

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

Adrian De Leon
fonte
Uma coisa eu notei. Se C: \ bar tiver alguma pasta e a opção / e foi adicionada. Ele recriará todas as pastas sem arquivos. Eu acho que desde o foo.txt funciona como um filtro e não foi possível encontrar nenhum arquivo nessas pastas e você está mantendo as pastas vazias. É por isso que as pastas vazias são criadas.
Donny V
1

Tente inserir um espaço antes do destino, desta forma:

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

observe o espaço após a "pasta" de destino z:.

user296831
fonte
3
Isso não funcionou para mim, tive que seguir as instruções do @ KPWINC e deixar o nome do arquivo fora do caminho de origem.
influente
3
Esta é uma resposta troll? Tentei e não funciona (nem parece que teria funcionado).
Pacerier
-4

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

Dale
fonte
Nome do arquivo de destino de origem de robocopy
Dale
6
Um comando sem explicação não é uma resposta útil.
kasperd