Robocopy / XD non funzionerà con percorsi relativi


13

Sto cercando di eseguire un /MOVEcomando robocopy ma escludo un paio di sottodirectory specificate con il /XDflag.

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

Sfortunatamente ignora l' /XDopzione e sposta tutto. Se uso un percorso assoluto su tutto, funziona benissimo, ma ho bisogno che questo sia flessibile. C'è un modo per farlo funzionare con percorsi relativi?


3
Va notato che è possibile trasformare percorsi relativi in ​​percorsi assoluti con meno sforzo di quanto si possa pensare, utilizzando la %CD%variabile di ambiente. Esempio: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
GBR

gbr answer dovrebbe essere la risposta corretta. (dato che non hai bisogno di ".." nel relativo percorso)
Sake,

Risposte:


14

Le cartelle specificate /XDsi riferiscono alle cartelle (da escludere) presenti nella cartella di origine, quindi si specificano solo i nomi delle cartelle che si desidera escludere, senza specificare una relazione principale.

vale a dire:

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

6
Unofortunatamente questo non funziona per le sottodirectory di livello 2 e superiore, ad es. / XD "SubDir1 / SubDir11".
Cercatore della verità,

@truthseeker - hai ragione. Funziona con le cartelle di 1 ° livello, ma niente di più basso. Per questo, devi usare il percorso sorgente assoluto (es. "/ Xd% ~ dp0CurrentDir \ Folder1 \ Subfolder1"), quindi ignorerà correttamente "Sottocartella1" ma sincronizzerà "Cartella1" ecc. Non puoi usare il percorso relativo, e non puoi usare il percorso di destinazione.
rocketmonkeys,

0

Di seguito può essere utile - risolve direttamente il problema relativo al percorso - ma consente molte directory di esclusione e directory secondarie.

Se stai semplicemente escludendo le cartelle di livello superiore, utilizza semplicemente il nome della cartella, ad esempio APC. Tuttavia, se si sta eseguendo una sottocartella, è necessario l'intero percorso. Il percorso deve corrispondere completamente al percorso di origine + percorso fino alla sottocartella. L'ho provato in molti modi diversi e questo è l'unico modo in cui sono riuscito a farlo funzionare. Questo formato file batch / cmd consente anche spazi nel percorso o nei nomi dei file.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.