Robocopy está ignorando os diretórios / xd

1

Estou tentando usar o Robocopy para criar compilações de software cliente, copiando todos os arquivos necessários do nosso repositório principal. Temos vários clientes, cada um precisando de seu próprio software personalizado.

Eu tenho uma lista de requisitos para a compilação de cada cliente. Meu pensamento é copiar as coisas principais primeiro (binários e similares, usados por todos os clientes) e depois copiar as informações específicas do cliente dependendo de quem eu estou fazendo uma compilação fazendo uso dessas listas. Nós temos algo assim já trabalhando com o xcopy.

Existe obviamente um monte de coisas que eu quero excluir do cliente, como arquivos de origem, arquivos de log e, obviamente, todas as coisas específicas do cliente. Eu pensei, fazendo uso inteligente dos switches /xf e /xd , eu deveria ser capaz de fazê-lo funcionar.

Após obter todas as informações necessárias, o seguinte comando é criado em Lua :

robocopy "Z:\path\to\source" "../dest"  /e /xf *.cpp *.h *.hpp [[. . .]] *.cxx   /xd Data/Testing Data/Some/Client/Data Data/Other/Client/Data [[ . . .]] Data/More/Directories 

Ao executá-lo, recebo a seguinte saída:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Tuesday, August 1, 2017 11:15:59 AM
   Source : Z:\path\to\source
     Dest : ../dest

    Files : *.*

Exc Files : *.cpp
        *.h
        *.hpp
        [[. . .]]
        *.cxx

 Exc Dirs : Data/Testing
        Data/Some/Client/Data
        Data/Other/Client/Data
        [[ . . .]]
        Data/More/Directories

  Options : *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30 

------------------------------------------------------------------------------

A saída informa que meu comando está formatado corretamente e que o Robocopy entende o que estou pedindo para fazer.

O problema é que ele está ignorando a lista Exc dirs e copiando tudo. Eu não quero excluir todo o diretório Data , mas apenas os bits dentro dele que são relevantes.

Se eu usar barras invertidas ( \ ), a saída Exc dirs será impressa como Data\testing . Este poderia ser o meu problema?

    
por getack 01.08.2017 / 13:33

1 resposta

0

robocopy é anunciado como o substituto de xcopy , mas se não for possível fazer algo simples como o que eu quero, é realmente uma péssima substituição.

Qualquer nome de diretório após /xd que corresponde é excluído. Isso faz sentido e funciona como anunciado. Parece que a qualquer momento que você der mais do que apenas um nome de diretório, ele molha a cama. Meu problema certamente não é tão único, olhando para algumas das outras pessoas na internet e seus problemas com robocopy .

Eu tenho os seguintes diretórios:

C:\repo\SomeProject\Data             <- DONT exclude this
C:\repo\SomeOtherProject\Data        <- DONT exclude this
C:\repo\AnotherProject\bar           <- DONT exclude this
C:\repo\Data\foo                     <- Exclude this
C:\repo\Data\bar                     <- Exclude this
C:\repo\Data\baz                     <- DONT exclude this
  • Se eu chamar robocopy com /xd Data , então C:\repo\SomeProject\Data e C:\repo\SomeOtherProject\Data também serão excluídos
  • Se eu chamar robocopy com /xd foo bar , então C:\repo\AnotherProject\bar também será excluído.

Desejo poder chamar robocopy com /xd Data\foo Data\bar , de modo que apenas foo e bar in Data sejam excluídos.

Caminhos de arquivos absolutos não funcionarão porque o código deve ser portável e eu realmente não quero injetar caminhos absolutos para cada entrada na minha lista de exclusão de > 100. Simplesmente não parece certo.

O que parece acontecer é se eu usar /xd Data\bar , então o robocopy o interpreta como Data\bar , o que não é possível encontrar. Eu não sei porque um único \ é alterado para \ e qualquer permutação de \ ou / também não funciona.

A solução

Por fim, a resposta à minha pergunta é usar xcopy . Eu dou uma lista contendo entradas como *.cpp , 8.vcxproj , \Data\foo\ , \Data\bar \ e 100 outras entradas e parece funcionar muito bem, excluindo todas as coisas que eu não quero, mantendo as coisas Eu preciso.

    
por 01.08.2017 / 15:26