SmartCopy v0.3.1
Windows 檔案複製 · 移動

中斷後繼續,
刪除前先 校驗.

檔案總管的複製對話框一旦中斷,不會告訴你進行到哪裡。SmartCopy 把作業放進佇列,可以暫停和繼續,並且只有在校驗通過後才刪除移動的來源。拔掉隨身碟、NAS 斷線、重開機,進度都還在。

免安裝 · 無須系統管理員權限 · Windows 10 / 11(64 位元)

實際畫面配置 · 範例資料
SmartCopy v0.3.1 管理主控台日誌─ □ ✕
來源
D:\照片 2024
D:\相機原片
目標
E:\備份
操作
複製移動
校驗
SHA-256
開始作業
照片 2024 → 備份 進行中
12,481 / 20,004 個檔案 14.2 GB / 22.8 GB 186 MB/s 剩餘時間 00:47

成功 12,481 · 略過 0 · 失敗 0 · 剩餘 8.6 GB

D:\照片 2024\2024-07\IMG_4821.ARW

暫停 取消
專案封存 → NAS 等待重新連線
3,902 / 6,110 個檔案 41.0 GB / 64.3 GB 已暫停

裝置已中斷 — 重新連接後會繼續 (WinError 64)

發票 → 封存 完成
412 / 412 個檔案 SHA-256 校驗通過
移動的順序

來源最後才刪除

移動分三個階段,前一個結束才進入下一個。

階段 1

複製

在目標位置寫成 .scpart 暫存檔。寫完之後才改成最終名稱,所以中途停下也不會讓寫了一半的檔案看起來像正常檔案。

階段 2

校驗

比對大小和修改時間,需要時還比對 SHA-256。若不一致就刪除該副本並重新複製。

階段 3

刪除來源

只有通過校驗的檔案才刪除來源。被略過的檔案的來源會保留,空資料夾最後再清理。

同一磁碟機內的移動只是改名 — 很快,而且根本不會產生中間狀態。上面的三個階段只用於跨磁碟機。

同名檔案已存在時

六種衝突原則

可以在建立作業時預先決定,也可以讓它每次詢問。選擇詢問時,對話框裡可以勾選 對之後的衝突也套用相同選擇

原則作用適用情境
overwrite覆寫目標來源始終最新的單向備份
skip略過並保留來源只補齊缺少的部分
rename名稱 (1).副檔名新建為兩者都要保留時(預設)
keep_newer保留修改時間較新的一方合併兩邊都改過的資料夾
keep_larger保留較大的一方混有被截斷儲存的檔案時
ask顯示雙方的大小和時間並詢問需要逐一判斷時
中斷 · 拔除 · 斷電

它記得停在哪裡

進度不只存在於畫面上,而是寫入磁碟。所以關掉應用程式或斷電都不會從頭再來。

作業日誌

每完成一個檔案就附加一行。因為只做附加,斷電最多損壞最後一行,而那一行直接丟棄。

  • 再次執行會略過已完成的檔案
  • 成功結束的作業會自行刪除日誌
  • 啟動時會找出未完成的作業並詢問是否繼續

%LOCALAPPDATA%\SmartCopy\jobs\

單一檔案內部的續傳

大檔案的 .scpart會原樣保留已經寫到哪裡。只有在旁邊的中繼資料檔確認來源的大小和修改時間沒變之後才續傳。

  • 如果來源變了就不續傳,而是重頭再來
  • 其他作業留下的殘留會就地清理

隨身碟拔除 · NAS 斷線

裝置消失時不會算作失敗 —— 作業會進入 等待重新連線 狀態並暫停。重新連接後會從中斷處繼續。

WinError 21 · 53 · 59 · 64 · 1167

只重做失敗的檔案

暫時性問題(例如被其他程式鎖定的檔案)會按 0.5 秒 → 2 秒 → 5 秒自動重試。仍然失敗的會留在清單裡,用 重試 按鈕只重跑那些 —— 資料夾結構原樣保留。

無人看管時

設定一次,它自己執行

如果每次都在手動點同樣的按鈕,那是程式該做的事。

監看資料夾

檔案進入資料夾並安靜下來後,就執行你儲存的作業。不會去抓正在寫入的檔案——它會等變化停止。

smartcopy-cli watch "交付" --folder D:\讀卡匯入

工作排程器

每天凌晨三點,或登入時。無需系統管理員權限即可設定,也能直接在 Windows 工作排程器中刪除。

smartcopy-cli schedule --install "每週備份" --when daily --at 03:00

檔案總管右鍵

右鍵點擊資料夾,就會出現你儲存的作業名稱。選取後視窗會填入該設定——開始仍由你來按。

證明彼此作證

單張證明很容易被丟掉。因此每張都包含前一張的雜湊——抽掉中間一張,鏈條就斷了。

smartcopy-cli ledger --verify

這不是時間戳機構。它擋住的是:交付了十次,卻只拿出中意的九次。

即使放進 10 萬個

佇列來安排順序

處理什麼方式
區塊大小根據媒體決定 —— 固定磁碟 4 MB、隨身碟 1 MB、網路 256 KB。暫停和取消在區塊邊界回應,所以不會一味加大。
同時執行的作業預設 2 個,因為多個作業同時壓同一顆磁碟反而整體更慢。
優先度每個作業帶有優先度,高的先走。相同時按加入順序。
大批量列舉scandir 走訪,並且不跟隨符號連結和連接點,所以不會陷入循環複製。
長路徑 · Unicode透過繞開 260 字元限制的路徑前綴來處理。Unicode 名稱原樣保留。
進度更新合併為每 0.2 秒一次 —— 這樣在 10 萬個檔案時,更新畫面不會比複製還貴。
同時的檔案數在一個作業內同時複製多個檔案(最多 16)。小檔案很多或使用 NAS 時收益最大。
速度限制每秒位元組上限。適合一邊跑備份一邊開會的時候。各工作執行緒共用同一個桶。
篩選包含/排除模式、整個資料夾排除、大小與日期範圍、排除隱藏檔案。
預覽一個位元組也不寫,只計算將會移動什麼。
開始前的檢查先確認目標的剩餘空間、目標是否位於來源之下、是否為受保護路徑,以及來源是否存在。

比 robocopy 慢。 因為它為每個檔案記錄續傳資訊、驗證已複製的內容、並寫入日誌——這三件事正是本程式存在的理由。 在內建 SSD 上,小檔案約慢 5~15 倍,大檔案約慢 7 倍。測得的數字和測量方法都放在程式庫裡。

多個作業集中一處

管理主控台

視窗看的是此刻在搬什麼,主控台看的是全貌:佇列、歷史、復原、日誌、校驗都在一螢幕。 smartcopy-cli admin 或視窗介面的 管理主控台 按鈕開啟。

能看到什麼

  • 進度橫幅 —— 多個作業的合計進度、速度、剩餘時間
  • 作業卡片 —— 狀態標籤、進度、成功/相同/略過/失敗
  • 作業詳情 —— 失敗清單與原因、警告、平均速度
  • 復原 —— 選擇中斷的作業繼續或丟棄
  • 完整性校驗 —— 用清單比對目標是否原樣

能操作什麼

  • 新增作業 —— 路徑選擇視窗、篩選、效能選項
  • 開始前檢查 —— 提前提示受保護路徑和剩餘空間
  • 暫停 / 繼續 / 取消 / 重試失敗項(單一或全部)
  • 調節同時執行的作業數

主控台只在 127.0.0.1 上開啟 ,並且需要每次執行時重新產生的權杖。外部網域指向該位址的手法(DNS 重新繫結)會被 Host 檢查擋下,而其他網站讓瀏覽器發出的請求會被 Origin 檢查擋下。

不開視窗

命令列裡也是同一個引擎

批次檔和工作排程器就用 smartcopy-cli.exe

# 複製資料夾 + SHA-256 校驗 > smartcopy-cli copy "D:\照片 2024" E:\備份 --verify hash [running] [################----] 83.3% 14.2 GB/22.8 GB 186 MB/s ETA 00:47 # 移動 —— 同名時改用新名稱 > smartcopy-cli move C:\封存 E:\倉庫 --conflict rename # 查看中斷的作業並繼續 > smartcopy-cli recover > smartcopy-cli recover --resume # 比對之前複製好的結果 > smartcopy-cli verify D:\來源 E:\備份\來源 --level hash # 註冊檔案總管選單(目前使用者,無須系統管理員權限) > smartcopy-cli shell --install
下載

兩個都不需要安裝

設定和日誌只寫在 %LOCALAPPDATA%\SmartCopy ,別處不寫。

視窗介面

SmartCopy.exe

拖放即可加入,用作業卡片查看進度。檔案總管右鍵選單呼叫的也是這個檔案。

13.6 MB · SHA-256 2e1f9b91034f8cea14cf6d2236741b7a165b25ebaf364e1b9a7d203578892197

下載

命令列

smartcopy-cli.exe

copy · move · recover · verify · shell。適合指令碼和排程工作。

13.6 MB · SHA-256 d3f8f003b8d1f2b22faf621b5b1531c73a6e456315124e609be43b9e55d53c96

下載

檔案總管右鍵整合

右鍵檔案或資料夾選擇 加入 SmartCopy,在要移動到的資料夾裡選擇 設為 SmartCopy 目標。分幾次新增也會匯集到同一個視窗。

只註冊在 HKEY_CURRENT_USER 之下 —— 一條 shell --uninstall 即可撤銷

需要什麼

  • Windows 10 / 11(64 位元)
  • 無須系統管理員權限
  • 支援 SMB · NAS · 隨身碟 · 抽取式磁碟
  • 從原始碼執行需要 Python 3.9 以上(僅標準函式庫)