Robocopy / XD Tidak Akan Bekerja Dengan Jalur Relatif

13

Saya mencoba menjalankan /MOVEperintah robocopy tetapi mengecualikan beberapa subdirektori yang ditentukan dengan /XDflag.

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

Sayangnya itu mengabaikan /XDopsi dan memindahkan segalanya. Jika saya menggunakan jalur absolut pada semuanya, itu berfungsi dengan baik, tapi saya ingin ini fleksibel. Apakah ada cara untuk membuatnya bekerja dengan jalur relatif?

pengguna8783
sumber
3
Perlu dicatat bahwa Anda dapat mengubah jalur relatif menjadi jalur absolut dengan sedikit usaha daripada yang mungkin dipikirkan, dengan menggunakan %CD%variabel lingkungan. Contoh: robocopy ".\CurrentDir" ".\NewDir" /XD "%CD%\CurrentDir\SubDir1" "%CD%\CurrentDir\SubDir2" /E /MOVE
gbr
Jawaban gbr harus menjadi jawaban yang benar. (mengingat Anda tidak perlu ".." di jalur relatif)
Sake

Jawaban:

14

Folder yang ditentukan untuk /XDmerujuk ke folder (untuk mengecualikan) yang ada dalam folder sumber, jadi Anda hanya menentukan nama folder yang ingin Anda kecualikan, tanpa menentukan hubungan induk.

yaitu:

robocopy ".\CurrentDir" ".\NewDir" /XD "SubDir1" "SubDir2" /E /MOVE
Ƭᴇcʜιᴇ007
sumber
6
Sayangnya ini tidak berfungsi untuk subdirektori di level 2 dan lebih tinggi yaitu / XD "SubDir1 / SubDir11".
truthseeker
@truthseeker - Anda benar. Ini berfungsi untuk folder tingkat pertama, tetapi tidak ada yang lebih rendah. Untuk itu, Anda harus menggunakan jalur sumber absolut (mis. "/ Xd% ~ dp0CurrentDir \ Folder1 \ Subfolder1"), maka ia akan mengabaikan "Subfolder1" dengan benar tetapi menyinkronkan "Folder1" dll. Anda tidak dapat menggunakan jalur relatif, dan Anda tidak dapat menggunakan jalur tujuan.
rocketmonkeys
0

Berikut ini dapat membantu - itu memang menangani masalah jalur relatif secara langsung - tetapi memang memungkinkan banyak mengecualikan direktori dan sub direktori.

Jika Anda hanya mengecualikan folder tingkat atas - cukup gunakan nama folder - misalnya APC. Namun jika Anda melakukan sub folder - Anda memerlukan seluruh path. Path harus sepenuhnya mencocokkan path sumber + path ke subfolder. Saya telah mengujinya dengan berbagai cara dan ini adalah satu-satunya cara saya bisa membuatnya bekerja. Format file batch / cmd ini juga memungkinkan spasi di path atau nama 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
John Besar
sumber