
我想使用 robocopy 移動大量文件,白名單中的文件除外。白名單包含大約 150 個不同名稱的檔案。當我將白名單的檔案名稱複製並貼上到命令列(使用參數/xf
)時,robocopy 會截斷該清單。
c:\test> robocopy src dest *.ext /xf exclude1.ext exclude2.ext exclude3.ext ... exclude 299.ext exclude300.ext
結果是:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Fri May 24 14:09:31 2013
Source : C:\test\src\
Dest : C:\test\dest\
Files : *.ext
Exc Files : exclude1.ext
exclude2.ext
exclude3.ext
....
....
exclude200.ext
exclude201.ext
exclu
進而:
'exclude250.ext' is not recognized as an internal or external command,
operable program or batch file.
'exclude251.ext' is not recognized as an internal or external command,
operable program or batch file.
'exclude252.ext' is not recognized as an internal or external command,
operable program or batch file.
'exclude253.ext' is not recognized as an internal or external command,
operable program or batch file.
不幸的是,白名單中的文件是手工挑選的,無法透過通配符過濾。
有辦法解決這個問題嗎?
答案1
Windows 中的命令列長度有限制(我認為大約是 2048 個字元)。
您應該產生一個作業文件,其中指定了排除列表的一小部分(使用參數/save:filename
)來獲取語法,編輯文件以包含完整列表,然後使用參數/job:filename
來運行它。
答案2
事實證明,robocopy 作業文件語法並不那麼複雜。
對於您的具體情況,您可以透過建立包含以下內容的 robocopy 作業檔案來實現您想要的目的:
/XD
exclude1.ext
exclude2.ext
exclude3.ext
....
如果您也想對檔案執行相同的操作,那麼您的 robocopy 作業檔案將如下所示:
/XD
exclude1.ext
exclude2.ext
exclude3.ext
....
/XF
file1.ext
file2.ext
file3.ext
....
透過使用相同的邏輯,您可以將任何其他選項從命令列移至作業文件。
答案3
嘗試在 /XF filename1*.ext 之後使用通配符 filename2*.ext filename3*.ext 這僅在您知道檔案名稱在整個結構中是唯一的情況下才有效。您可以變更要排除的檔案的命名約定來繞過此限制。