Exclusões de diretório curinga com robocopy - caso estranho

15

Eu preciso obter o robocopy para excluir qualquer arquivo cujo caminho contenha um diretório com um nome específico. Por exemplo, "bar":

c:\foo\bar\a.txt
c:\bar\c.txt
d:\baz\bar\flub\d.txt

deve ser excluído, mas não

c:\foo\barf\b.txt

Aqui estão as coisas que eu tentei - cada uma delas foi rejeitada por robocopy:

/XD \bar\
/XD *\bar\*
/XD *^\bar^\*

Alguma idéia?

    
por Jesse 25.08.2011 / 15:30

3 respostas

16

Desativa as correspondências / XD no nome do diretório - não no caminho completo. Então você não precisa se preocupar com as barras invertidas.

Então, para excluir diretórios (em qualquer lugar do caminho) chamado "bar", uma simples / barra XD funcionará. Se você queria que excluísse "barf", você também poderia usar / XD bar *.

Às vezes, a resposta é mais simples do que você pensa.

    
por 25.08.2011 / 20:04
1

Parte da falha é usar um trailing \ in Robocopy quando se refere a um diretório - que é um não-não - pois o Robocopy tenta interpretá-lo como um caractere de escape. Quase todos cometem esse erro de uma forma ou de outra com o Robocopy. Com isso em mente, este exemplo funcionará:

/XD "\Bar"

Se você quisesse combinar uma estrutura de pastas mais específica (para não corresponder a outras subpastas, adicione mais detalhes, como:

/XD "\Foo\Bar"
/XD "C:\Foo\Bar"
    
por 09.04.2016 / 10:51
1

Se você tentar vários filtros de diretório, limpe sua pasta de destino entre as alterações!

Uma pegadinha para mim foi que eu não sabia que a opção ignorar diretório é aplicada às pastas de destino também. Eu executei o robocopy com /MIR e alterei o diretório de origem, e meu diretório de destino foi atualizado conforme o esperado. Então percebi que tinha pastas de arquivamento que não queria, então adicionei /XD archive , mas minha pasta de destino ainda tinha pastas de arquivamento!

Depois de mexer com curingas e incluir / excluir o \ s, finalmente tentei excluir a pasta de destino e re-executar o script - desta vez não tinha as pastas de arquivo! Aqui está o comando que eu estava executando, com os nomes dos diretórios alterados para proteger os inocentes:

robocopy \SERVER\Some\Folder\Path .\Some\Relative\Path /Copy:DAT /Mir /R:0 /W:1 /XD archive*
    
por 28.02.2017 / 23:48

Tags