robocopy 來源資料夾 目的地資料夾 檔名 選項
robocopy C:\a.txt D:\backup
robocopy會認為C:\a.txt
是個資料夾
如果沒有找到C:\a.txt
資料夾,會報錯
robocopy C:\src D:\backup
如果D:\backup
不存在,會自動建立資料夾
rem 路徑有空格,需要加雙引號
rem 反斜線 + 雙引號 \" 會導致錯誤
robocopy "C:\src 123\" D:\backup
rem 正確寫法 路徑最後面不要加 \
robocopy "C:\src 123" D:\backup
rem 正確寫法 路徑最後面加 \\
robocopy "C:\src 123\\" D:\backup
rem 路徑沒有空格,加了雙引號,報錯
robocopy "C:\" D:\backup
rem 正確寫法 路徑最後面加 \\
robocopy "C:\\" D:\backup
# PowerShell
# 路徑沒有空格,加了雙引號,OK
robocopy "C:\" D:\backup
# 一樣意思
robocopy 'C:\' D:\backup
# 一樣意思
$a = "C:\"
robocopy $a D:\backup
# 字串沒有空格,PowerShell在傳參數給robocopy時
# 就不會多加雙引號
# 字串有空格,就會加雙引號
# 最後的反斜線要寫成 \\
robocopy C:\src D:\backup
複製C:\src
裡面的檔案,到D:\backup
裡面
不是把C:\src資料夾
複製貼上到D:\backup
裡面、成為D:\backup\src
預設值:只複製一層檔案、不複製子資料夾
rem 複製所有檔案
robocopy C:\src D:\backup
rem 複製 *.txt *.jpg a.zip
robocopy C:\src D:\backup *.txt *.jpg a.zip
可以使用萬用字元
只能提供檔名,不可以帶有路徑
隱藏檔也會複製
rem 預設值:不複製子資料夾
robocopy C:\src D:\backup *.txt a.zip
robocopy C:\src D:\backup *.txt a.zip
rem 每一層
robocopy C:\src D:\backup *.txt a.zip /S
robocopy C:\src D:\backup *.txt a.zip /E
rem 兩層:來源資料夾、第一層子資料夾
robocopy C:\src D:\backup *.txt a.zip /S /LEV:2
robocopy C:\src D:\backup *.txt a.zip /E /LEV:2
/S
為了放複製過來的檔案
,而建立子資料夾/E
先建立子資料夾。如果沒有檔案要放進去,就變成空資料夾
rem /XF 要排除的檔名。可以用 (路徑 + 檔名)
robocopy C:\src D:\backup *.txt /XF a* C:\src\b*
rem /XD 要排除的資料夾名。可以用 (路徑 + 資料夾名)
robocopy C:\src D:\backup *.txt /XD a* C:\src\b*
rem /MAX:n 最多 n bytes
robocopy C:\src D:\backup *.txt /MAX:10000
rem /MIN:n 至少 n bytes
robocopy C:\src D:\backup *.txt /MIN:2000
/MAXAGE
rem 最多7天。7天之內
rem 時間軸方向:7天前的時間點,往右
robocopy C:\src D:\backup *.txt /MAXAGE:7
rem 時間軸方向:往右
robocopy C:\src D:\backup *.txt /MAXAGE:20240801
/MINAGE
rem 至少7天。7天起跳
rem 時間軸方向:7天前的時間點,往左
robocopy C:\src D:\backup *.txt /MINAGE:7
rem 時間軸方向:往左
robocopy C:\src D:\backup *.txt /MINAGE:20240801
/MAXLAD:n
/MINLAD:n
(如果 n < 1900 則 n = n 日,否則 n = YYYYMMDD 日期)。
/IA:屬性 包含指定屬性的檔案
/XA:屬性 排除指定屬性的檔案
/A 選擇有A屬性的檔案
/M 選擇有A屬性的檔案。複製完之後,清除來源檔
的A屬性
沒有被選擇,即排除
rem 只要有R屬性、A屬性其中一個屬性,就選擇
robocopy C:\src D:\backup *.txt /IA:RA
rem 只要有H屬性、S屬性其中一個屬性,就排除
robocopy C:\src D:\backup *.txt /XA:HS
可指定的屬性
R 唯讀
A 封存
S 系統
H 隱藏
C 已壓縮
N 未編製內容索引
E 已加密
T 暫存
O 離線
/XL 排除只有來源有
的檔案
/XJ 排除 符號連結 (同時適用於檔案與目錄) 和連接點。
/XJD 排除 目錄和連接點
的符號連結。
/XJF 排除 檔案
的符號連結。
檔案類別 | 來源 | 目的地 | 備註 |
---|---|---|---|
New新檔案 |
Yes | No | 沒有使用/XL 排除 |
Lonely孤立的 |
Yes | No | 有使用/XL 排除 |
Extra File其他檔案 |
No | Yes | 跟檔名 有關 |
Extra Dir 其他目錄 |
No | Yes | 通常跟層數 有關 |
Mismatched不相符 |
Yes(檔案) | Yes(資料夾) | 或左右情況相反 |
修改時間不同。(預設值:複製
)
/XO
排除較舊的檔案
/XN
排除較新的檔案
修改時間相同、檔案大小不同。(預設值:複製
)
/XC
排除變更的檔案
修改時間相同、檔案大小相同。(預設值:略過
)
/IT
包含修改時間相同
、檔案大小相同
、屬性不相同
的檔案
/IM
包含修改時間相同
、檔案大小相同
、屬性相同
、$MFT修改時間不同
的檔案
/SEC
(也就是 /COPY:DATS
),有 /IM
的效果
/IS
包含修改時間相同
、檔案大小相同
、屬性相同
、$MFT修改時間相同
的檔案
檔案類別 | 修改時間 | 檔案大小 | 屬性 | $MFT修改時間 |
---|---|---|---|---|
Newer較新 |
來源 > 目的地 | |||
Older較舊 |
來源 < 目的地 | |||
Changed已變更 |
相同 | 不同 |
||
Tweaked已調整 |
相同 | 相同 | 不同 |
|
Modified已修改 |
相同 | 相同 | 相同 | 不同 |
Same相同 |
相同 | 相同 | 相同 | 相同 |
NTFS磁碟機的檔案時間
robocopy C:\src D:\backup *.txt
C:\src\1.txt (NTFS磁碟機)
檔案修改時間 11:27:12.9051975
D:\backup\1.txt (FAT32磁碟機、2秒精密度)
檔案修改時間 11:27:14
當一個是NTFS
磁碟機,另一個是FAT32
磁碟機時,
會把NTFS
磁碟機的檔案時間,轉成FAT32
的精密度,再進行比較
雖然實際上,兩個檔案的時間不同,
robocopy可能會認為時間相同
C:\src\1.txt (NTFS磁碟機)
檔案修改時間 11:27:12.9051975
C:\2\1.txt (NTFS磁碟機、這個檔案是從FAT32磁碟機複製過來的)
檔案修改時間 11:27:14
兩個都是NTFS
磁碟機的檔案
使用 /FFT
參數,把兩者的時間,轉成FAT32
的精密度,再進行比較
根據比較結果,進行複製or略過
robocopy C:\src C:\2 *.txt /FFT
rem 不管複製還是略過,都複製時間
robocopy C:\src C:\2 *.txt /FFT /TIMFIX
D - 資料
A - 屬性
T - 時間戳記
X - 略過替代資料流
S - NTFS 存取控制清單 (ACL)
O - 擁有者資訊
U - 稽核資訊
如果使用 /B 或 /ZB,則會忽略 X 旗標。
rem 預設值:複製「資料」、「屬性」、「時間戳記」
robocopy C:\src D:\backup
rem 上下兩行一樣效果
robocopy C:\src D:\backup /COPY:DAT
rem 複製「資料」、「屬性」、「時間戳記」、「權限」
robocopy C:\src D:\backup /COPY:DATS
rem 上下兩行一樣效果
robocopy C:\src D:\backup /COPY:SEC
rem 複製全部內容
robocopy C:\src D:\backup /COPY:DATSOU
rem 上下兩行一樣效果
robocopy C:\src D:\backup /COPYALL
rem 只更新時間 (同名檔案需要存在。否則略過)
robocopy C:\src D:\backup /COPY:T
rem 只更新權限 (同名檔案需要存在。否則略過)
robocopy C:\src D:\backup /COPY:S
rem 用瀏覽器下載的檔案,有替代資料流 Zone.Identifier
rem 使用 X 跳過、不複製替代資料流
robocopy C:\src D:\backup /COPY:DATX
D - 資料
A - 屬性
T - 時間戳記
E - 擴充屬性
X - 略過替代資料流
此選項的預設值為 DA (資料和屬性)。
/a+:[RASHCNET]
/a-:[RASHCNET]
R - 唯讀
A - 封存
S - 系統
H - 隱藏
C - 已壓縮
N - 未編製內容索引
E - 已加密
T - 暫存
O - 離線 (移除only)
rem 預設值:複製symlink的目標,而不是symlink本身
robocopy C:\src D:\backup
rem 複製symlink本身。需要系統管理員權限
robocopy C:\src D:\backup /SL
使用/SECFIX時,指定要複製哪些內容
稀疏檔案
/SPARSE:<y|n>
是否保留檔案的疏鬆狀態
預設值:是
/PURGE
刪除目的地
多的檔案、資料夾
目的地
多的檔案只跟選擇處理
的檔名有關
跟檔案大小、日期無關
rem 刪除目的地多的檔案,而且,檔案名稱a*
robocopy C:\src D:\backup a* /PURGE
目的地
多的資料夾刪除C:\src\a1
資料夾
rem 可以刪除,資料夾名稱a1符合a*
robocopy C:\src D:\backup a* /PURGE
rem 沒反應
robocopy C:\src D:\backup a* /PURGE /S /LEV:1
rem 可以刪除,跟a*無關
robocopy C:\src D:\backup a* /PURGE /S /LEV:2
rem 可以刪除,指定x* 證明跟資料夾名稱無關
rem 跟資料夾層數 /LEV 有關
robocopy C:\src D:\backup x* /PURGE /S /LEV:2
rem 可以刪除
robocopy C:\src D:\backup /PURGE /S /LEV:2
rem 可以刪除。刪除每一層「多的資料夾」
robocopy C:\src D:\backup /PURGE /S
/MOV
複製來源檔之後,刪除來源檔
rem 同名檔案相同時,略過、不複製,不會刪除來源檔
rem 使用 /IS 參數,同名檔案相同時,也進行複製,就會刪除來源檔
rocobopy C:\src D:\backup /IS /MOV
rem 只更新時間,也會刪除來源檔
rem 只對「存在、而且沒有被略過」的目的地檔案,更新時間
rocobopy C:\src D:\backup /COPY:T /MOV
/MOVE
複製來源檔之後
如果資料夾本來就是空的,也會刪除資料夾
如果資料夾裡面還有檔案留著,
就不會刪除資料夾
經過測試
子資料夾
可以被刪除/MIR
(等於 /E /PURGE)複製
各層檔案刪除
「來源沒有、目的地有」的檔案
rem 來源資料夾(一層)
robocopy C:\src D:\backup /PURGE
rem 每層資料夾
robocopy C:\src D:\backup /E /PURGE
rem 每層資料夾
robocopy C:\src D:\backup /MIR
來源沒有、目的地有
的檔案,不進行複製rem 來源資料夾(一層)
robocopy C:\src D:\backup /PURGE /NOCOPY
rem 每層資料夾
robocopy C:\src D:\backup /E /PURGE /NOCOPY
rem 每層資料夾
robocopy C:\src D:\backup /MIR /NOCOPY
rem 排除「來源有、目的地沒有」的檔案
robocopy C:\src D:\backup *.txt /XL
robocopy C:\src D:\backup /E /NOCOPY
robocopy C:\src D:\backup *.txt /CREATE
當目的地檔案不存在
時,建立空檔案
修改時間一樣,但是,檔案大小為0
當目的地檔案存在
時,略過、不處理
7天以外
的檔案rem 建立空資料夾
md D:\empty
rem 建立空檔案(7天以外)
robocopy C:\src D:\empty /MINAGE:7 /CREATE
rem 複製時間後,刪除來源檔
robocopy C:\src D:\empty /MINAGE:7 /COPY:T /MOV
rem 建立空資料夾
md D:\empty
robocopy D:\empty C:\src /MIR
/MT:n 以 n 個執行緒執行多執行緒複製 (預設值為 8)
n 必須至少為 1,但不可以大於 128
此選項與 /IPG 和 /EFSRAW 選項不相容
請使用 /LOG 選項重新導向輸出
,以獲得更好的效能
/R:n 失敗複本的重試次數: 預設值是 1 百萬次
/W:n 重試之間等候時間: 預設值是 30 秒
預設值太大,調小一點
時間還沒到,等待
時間到,開始複製/RH
時間範圍
robocopy C:\src D:\backup /RH:1700-0900
執行時間還沒有到,會出現以下訊息
> 小時 : 暫停時間從 10:00 到 17:00...
/PF
每個檔案
複製前,都檢查是否在時間範圍內
robocopy C:\src D:\backup /RH:1700-0900 /PF
/MON:n
監視來源; 看到 n 個字元以上時再次執行。/MOT:m
監視來源; m 分鐘後如果變更,則再次執行。
/LFSM
在低可用空間模式
中運作
當複製導致可用空間低於下限值
時,robocopy 就會暫停。
沒有指定下限值
時,預設值:10%
與 /MT 和 /EFSRAW 不相容
rem X:\ 是 VHD掛載的NTFS磁碟機
rem 複製到500MB的檔案到 X:\ (可用空間:984MB)
robocopy .\ X:\ 1.mp4 /LFSM:700M
rem 複製了285MB的時候,出現以下訊息
rem 等候可用空間;可用空間 699.36 m
rem 等候 30 秒... 正在重試...
如果把X:格式化成FAT32
進行複製時,不會暫停
出現以下訊息警告:無法查詢磁碟區空間; /LFSM 不會監視不足的可用空間。
/B
在備份模式複製檔案
需要這兩個備份權限SeBackupPrivilege
、SeRestorePrivilege
robocopy不能複製使用中的檔案
如果目的地檔案沒有存在,會報錯
如果目的地檔案已經存在,不會報錯,只會複製時間,不複製內容
/Z
在可重新啟動模式複製檔案/IPG:n
慢速線路可用頻寬,封包之間的差距 (毫秒)/TBD
等候共用名稱 (重試錯誤 67)/COMPRESS
在檔案傳輸期間要求網路壓縮 (如適用)
儘量使用UNC path
,不要使用掛載的磁碟機代號
/L
只列出清單。不做實際的寫入動作。
三個
部份/NJH
關閉顯示)/TS
檔案時間戳記/FP
檔案的完整路徑名稱/NS
不記錄檔案大小/NC
不記錄檔案類型/NFL
不記錄檔案名稱/NDL
不記錄目錄名稱/NP
不顯示複製百分比/ETA
顯示複製的檔案預估到達時間/NJS
關閉顯示)set FileOnly=/NJH /NJS /NC /NS /NDL
rem mismatched(不符合)的檔案仍然會被列出來
rem 以下:沒有子資料夾的情況
rem 左邊only:排除兩邊/XO /XN、排除右邊/XX
robocopy C:\src D:\backup /L %FileOnly% /XO /XN /XX
rem 兩邊都有的:排除左邊/XL、包含兩邊/IS /IT /IM、排除右邊/XX
robocopy C:\src D:\backup /L %FileOnly% /XL /IS /IT /IM /XX
rem 右邊only:排除左邊/XL、排除兩邊/XO /XN
robocopy C:\src D:\backup /L %FileOnly% /XL /XO /XN
/UNICODE
正確顯示
unicode,而不是顯示成問號
/LOG:file
(覆寫)/LOG+:file
(附加)/UNILOG:file
(覆寫)/UNILOG+:file
(附加)
/TEE
輸出至主控台視窗,以及記錄檔
複製設定
rem 把複製設定 (/SAVE前面的參數內容)
rem 儲存到job1.RCJ (ANSI編碼)
rem 如果不使用 /QUIT 仍然會執行命令
robocopy C:\src D:\backup *.txt *.jpg /SAVE:job1 /QUIT
rem 可以不指定來源、目的地
robocopy *.txt *.jpg /SAVE:job1 /QUIT
rem 使用job1.RCJ
robocopy /JOB:job1
rem 使用job1.RCJ(如果設定檔裡沒有來源、目的地)
robocopy C:\src D:\backup /JOB:job1
code | 意思 |
---|---|
16 | 不能複製任何檔案(語法錯誤、權限不足) |
8 | 有些檔案複製失敗 |
4 | 不符合 :相同名稱,一邊是檔案,另一邊是資料夾 |
2 | 目的地:多的 檔案 |
1 | 有檔案被複製 |
0 | 沒有檔案被複製,也沒有錯誤。資料夾已經同步 |
code | 意思 |
---|---|
16 | 嚴重錯誤 |
15 | 失敗 不符 多的 複製 |
14 | 失敗 不符 多的 |
13 | 失敗 不符 複製 |
12 | 失敗 不符 |
11 | 失敗 多的 複製 |
10 | 失敗 多的 |
9 | 失敗 複製 |
8 | 失敗 |
7 | 不符 多的 複製 |
6 | 不符 多的 |
5 | 不符 複製 |
4 | 不符 |
3 | 多的 複製 |
2 | 多的 |
1 | 複製 |
0 | 同步 |
exit code >= 8 有檔案複製失敗
取得exit code
rem cmd
echo %errorlevel%
# PowerShell
echo $LASTEXITCODE
windows - Does changing a file's attribute also change its time stamps? - Super User
Understanding NTFS Timestamps (Timeline Analysis) | by Dean | Medium
backup - how to copy files in use with robocopy? - Stack Overflow