2025年11月14日 星期五

如何開啟 Windows 的長路徑支援

今天利用 MSI 桌機把 5TB 行動硬碟內容拷貝到 16TB 大硬碟備份時出現 "檔案名稱將會太長, 目的地資料夾無法接受" 視窗 :




詢問 ChatGPT, 原來 Windows 在未啟用長路徑支援的情況下, 檔案的完整路徑長度限制為 260 個字元, 此長度限制來自舊的 Win32 API, 雖然新版的 Unicode API 理論上可支援長達 32767 字元的路徑, 但預設仍會限制在 260 字元, 因為 "登錄編輯器" 的長路徑支援 (LongPathsEnabled) 預設是關閉的 (=0). 

但並非將 LongPathsEnabled 打開後複製長檔案名稱就沒問題, 這還要看應用程式有沒有使用長路徑模式, 如果沒有使用, 即使打開長路徑支援也是無效的, 例如檔案總管 Explorer 就沒有使用長路徑模式. 其他程式例如 PowerShell 7, robocopy, Python 3.6+ 等則有使用長路徑模式. 

所以此問題的解決辦法就是先到 "登錄編輯器" 開啟長路徑支援 (LongPathsEnabled) 功能, 然後於 PS 7 中使用 robocopy 來複製資料. 

在 Win10/Win11 搜尋框輸入 regedit 打開豋錄表 :




在登錄表找尋下列路徑 :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled




若沒有 LongPathsEnabled 這項就按滑鼠右鍵 → 新增 → DWORD (32 位元) 值=1. 有的話點擊 LongPathsEnabled 將值改為 1, 基數選十進位或十六進位都可以 : 




設定完關閉登錄編輯器, 重新啟動電腦. 

然後以管理員身分開啟 Power Shell 7 程式, 用 robocopy 指令拷貝檔案, 例如 :

robocopy "G:\video11" "E:\video11" /E /COPYALL /R:0 /W:0

第一個參數是來源資料夾, 第二個是目的地資料夾, /E 表示包含所有子目錄 (包括空的), /COPYALL 表示資料 + 屬性 + 時間戳 + 安全性 (如果需要) 皆被複製 (須管理員權限), /R:0 表示若檔案複製失敗時重試次數為 0; /W:0 表示重試時每次等待 (wait) 的秒數為 0, 亦即如果遇到檔案複製失敗, robocopy 立即跳過不會重試也不會等待, 可避免卡在某個檔案一直重試. 

也可以只用 /E 參數 :

robocopy "G:\video11" "E:\video11" /E

                  總計       已複製        略過        不符        失敗        額外
      目錄 :      1829       228      1601         0         0         0
      檔案 :     25147      8053     17094         0         0         0
     位元組 : 584.171 g 123.906 g 460.264 g         0         0         0
      時間 :   0:55:28   0:54:22                       0:00:00   0:01:05


      速度 :           40,778,505 位元組/秒。
      速度 :            2,333.365 MB/分。
   已結束 : 2025年11月14日 上午 12:36:17

沒有留言 :