Questão Como posso especificar um arquivo / EXCLUDE com espaços para o xcopy?


Eu tentei especificar um /EXCLUDE nome do arquivo com espaços para xcopy, mas sempre engasga. Como posso especificar esse caminho para xcopy sem copiar o /EXCLUDE arquivos para o diretório atual e sem usar o antigo DOS ~1 shortname hack?

c:\Users\binki\Documents\repos\xcopy_exclude_spacey>dir source
 Volume in drive C is OS
 Volume Serial Number is 7C4E-86D4

 Directory of c:\Users\binki\Documents\repos\xcopy_exclude_spacey\source

2013-01-03  16:39    <DIR>          .
2013-01-03  16:39    <DIR>          ..
2013-01-03  16:39                 0 a
2013-01-03  16:39                 0 a b c
2013-01-03  16:39                 0 b
2013-01-03  16:39                 0 c
               4 File(s)              0 bytes
               2 Dir(s)  117,279,027,200 bytes free

c:\Users\binki\Documents\repos\xcopy_exclude_spacey>type "various exclude rules\a"
a

c:\Users\binki\Documents\repos\xcopy_exclude_spacey>xcopy /E /EXCLUDE:"various exclude rules\a" source dest
Can't read file: "various exclude rules\a"

0 File(s) copied

c:\Users\binki\Documents\repos\xcopy_exclude_spacey>xcopy /E "/EXCLUDE:various exclude rules\a" source dest
Invalid number of parameters

Nenhuma das maneiras de citar o nome do arquivo que funcionaria bem em um trabalho de shell decente para mim com xcopy. Por algum motivo, "/EXCLUDE:<filename>" A sintaxe impede que a própria opção seja reconhecida. A outra sintaxe, "/EXCLUDE:"<filename>", faz com que a mensagem Can't read file: "<filename>" a ser impresso, mostrando que a opção está sendo analisada corretamente: as aspas duplas estão impedindo que o argumento seja dividido em várias partes. No entanto, esta mensagem sugere que as aspas duplas não estão sendo corretamente removidas do nome do arquivo pelo xcopy antes de tentar abrir o arquivo.

Parece, a partir disso, que se o primeiro componente do caminho eu especificar /EXCLUDE começou com um " e meu /EXCLUDE nome do arquivo termina em ", Eu seria capaz de fazer referência a esse arquivo do xcopy /EXCLUDE opção com sucesso. Mas o Windows se recusa a deixar-me colocar o " personagem no meu nome de arquivo.

Então, como eu uso o xcopy em um mundo moderno com nomes de arquivos espaciais?


2


origem


O xcopy é um programa bastante antigo. Sugestão fácil, pare de usar nomes de arquivos com espaços ... eles são uma dor para lidar com geralmente em todos os OSen, pois eles tendem a ser seperators argumento. - mdpc
Todos os sistemas operacionais além do Windows parecem usar algo como um shell e ambiente POSIX que possui um método bem definido para especificar caminhos de arquivo com espaços. O Windows aparentemente não tem como transmitir verdadeiramente vários argumentos para um programa iniciado, mas passa os argumentos como uma string simples, o que significa que a delimitação do argumento ocorre na hora errada. Mas o Windows é o sistema operacional em que os espaços nos nomes dos caminhos são mais comuns, portanto, deve haver uma solução para esse problema, especialmente porque o xcopy no Windows 8 não pode ser o mesmo xcopy no Windows 98. - binki
Suponho, no entanto, que robocopy provavelmente funciona nessa situação e está disponível desde que você esteja segmentando um Windows moderno. - binki


Respostas: