Robocopy / XD não funciona com caminhos relativos


13

Estou tentando executar um /MOVEcomando robocopy, mas excluo alguns subdiretórios especificados com o /XDsinalizador.

robocopy ".\CurrentDir" ".\NewDir" /XD ".\CurrentDir\SubDir1" ".\CurrentDir\SubDir2" /E /MOVE

Infelizmente, ignora a /XDopção e move tudo. Se eu usar um caminho absoluto em tudo, funcionará bem, mas preciso que seja flexível. Existe alguma maneira de fazê-lo funcionar com caminhos relativos?


3
Note-se que você pode transformar caminhos relativos em caminhos absolutos com menos esforço do que se poderia pensar, usando a %CD%variável de ambiente. Exemplo: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
gbr 04/10

A resposta gbr deve ser a resposta correta. (dado que você não precisa ".." no caminho relativo)
Sake

Respostas:


14

As pastas especificadas /XDreferem-se às pastas (a serem excluídas) existentes na pasta de origem; portanto, você especifica apenas os nomes de pastas que deseja excluir, sem especificar uma relação pai.

ou seja:

robocopy ".\CurrentDir" ".\NewDir" /XD "SubDir1" "SubDir2" /E /MOVE

6
Infelizmente, isso não funciona para subdiretórios no nível 2 e superior, ou seja, / XD "SubDir1 / SubDir11".
truthseeker

@ Truthseeker - você está certo. Funciona para pastas de primeiro nível, mas nada mais baixo. Para isso, é necessário usar o caminho de origem absoluto (por exemplo, "/ xd% ~ dp0CurrentDir \ Folder1 \ Subfolder1"), em seguida, ele ignora corretamente "Subfolder1", mas sincroniza "Folder1" etc. Você não pode usar o caminho relativo e você não pode usar o caminho de destino.
Rocketmonkeys

0

O seguinte pode ajudar - ele resolve o problema do caminho relativo diretamente - mas permite muitos diretórios e subdiretórios de exclusão.

Se você apenas excluir pastas de nível superior - use o nome da pasta - exemplo APC. No entanto, se você estiver criando uma subpasta - precisará do caminho inteiro. O caminho deve corresponder totalmente ao caminho de origem + caminho até a subpasta. Eu testei de várias maneiras diferentes e essa é a única maneira de fazê-la funcionar. Esse formato de arquivo em lote / cmd também permite espaços no caminho ou nos nomes dos arquivos.

setlocal
set Source_path="\\usatlvmpdroadm1\C$\Installs"
set Destination_path="C:\Robo"
set Log_Path_and_File="C:\RoboCopy_Log_Files\01-Installs C drive to Robo C drive.txt"
set ED1="APC"
set ED2="\\usatlvmpdroadm1\C$\Installs\Dell\Dell MD3420 Firmware"

robocopy.exe %Source_path% %Destination_path% /COPYALL /ZB /MIR /MT:128 /DCOPY:T /XA:SH /XD %ED1% /XD %ED2% /XJ /XJD /R:2 /W:1 /NDL /NP /TEE /LOG:%Log_Path_and_File%

endlocal
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.