科技 · 實用指南
Robocopy 回傳代碼 1 但檔案已複製?修正 CI 邊界,不要誤判複製失敗
Robocopy 以 0–7 表示已完成結果,8 以上才代表至少一次複製失敗。先保留原始代碼與日誌,再在批次、PowerShell 或 Jenkins 邊界轉換。

Robocopy 回傳 1 代表所選檔案成功複製;Jenkins 等執行器卻會把任何非零狀態判成失敗。
應立刻保存原始值:低於 8 是完成狀態,8 以上失敗,並保留摘要與日誌。
先擷取原始結果
Robocopy 結束後立即讀取 %ERRORLEVEL% 或 $LASTEXITCODE;下一個外部命令可能覆寫它。
保留 copied、FAILED、Mismatch 與 Extras;代碼分類結果,日誌解釋細節。
正確區分 0–7 與 8+
0 是無需複製,1 是成功複製,2–7 是其他沒有複製失敗的完成組合。/MIR 仍需審查額外項。
使用 8 作為失敗門檻;不要把所有非零視為失敗,也不要用過窄的 0–3 規則。
在 cmd 與 PowerShell 轉換
批次先保存 rc;rc GEQ 8 時回傳原始失敗碼,否則向 CI 回傳 0。
PowerShell 先保存 $LASTEXITCODE 並寫入日誌;小於 8 回傳 0,否則回傳 rc。
在 Jenkins 保留失敗
Jenkins 的 Windows 步驟預設因非零失敗;returnStatus: true 讓 Pipeline 取得狀態。
低於 8 可讓步驟成功,但必須保留日誌;8 以上要失敗並顯示原值。
核驗複製與紀錄
核對來源、目的地、數量與代表檔案。/MIR 或 /PURGE 可刪除額外內容,非失敗不等於政策安全。
記錄命令、選項、原始代碼、CI 代碼和日誌;路徑或數量異常時停止。
