1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | Ca版本 @echo off :: 啟用延遲環境變數擴展,使得可以在迴圈內即時更新變數值 setlocal enabledelayedexpansion :: 切換至 UTF-8 編碼,確保日文等 Unicode 字符可正確處理 chcp 65001 > nul :: ===== 基本設定 ===== :: 設定來源與目標資料夾、7-Zip 路徑 set "SOURCE=E:\E-Download" :: 來源資料夾,包含要壓縮的子資料夾 set "DEST=E:\E-Downloadzip" :: 輸出資料夾,存放壓縮後的檔案 set "7ZEXE=C:\Program Files\7-Zip\7z.exe" :: 7-Zip 執行檔路徑 :: ===== 錯誤檢查 ===== :: 檢查來源資料夾是否存在 if not exist "%SOURCE%" ( echo [✖] 錯誤:來源資料夾不存在「%SOURCE%」 echo 請確認路徑設定正確後再執行。 pause exit /b 1 ) :: 檢查 7-Zip 程式是否存在 if not exist "%7ZEXE%" ( echo [✖] 錯誤:找不到 7-Zip 程式於「%7ZEXE%」 echo 請確認 7-Zip 已安裝或修改路徑設定。 pause exit /b 1 ) :: ===== 準備工作 ===== :: 建立輸出資料夾(如無則建立) if not exist "%DEST%" ( echo [!] 建立輸出資料夾:%DEST% mkdir "%DEST%" ) :: 創建臨時檔案來存儲資料夾清單,避免編碼問題 set "TEMPLIST=%TEMP%\folder_list_%RANDOM%.txt" echo [*] 正在列出子資料夾並依建立時間排序... :: 使用 PowerShell 依建立時間排序資料夾並儲存到臨時檔案 powershell -nologo -command ^ "Get-ChildItem -Path '%SOURCE%' -Directory | Sort-Object CreationTime | ForEach-Object { $_.FullName }" > "%TEMPLIST%" :: 計算總資料夾數量,提供進度顯示 set /a total=0 for /f "usebackq delims=" %%A in ("%TEMPLIST%") do set /a total+=1 echo [i] 找到 %total% 個資料夾需要壓縮。 echo. :: ===== 開始壓縮 ===== set /a current=0 for /f "usebackq delims=" %%F in ("%TEMPLIST%") do ( set /a current+=1 set "FULLPATH=%%F" :: 獲取資料夾名稱,保留 Unicode 字符 for %%D in ("!FULLPATH!") do set "FOLDER=%%~nxD" set "ARCHIVE=%DEST%\!FOLDER!.7z" :: 顯示進度及當前處理的資料夾 echo [%current%/%total%] ▷ 壓縮中:!FOLDER! :: 執行壓縮,使用一般壓縮等級(-mx=5) "%7ZEXE%" a -t7z -mx=5 "!ARCHIVE!" "!FULLPATH!\*" >nul :: 檢查壓縮結果 if !errorlevel! equ 0 ( echo [%current%/%total%] ✓ 完成:!FOLDER! ) else ( echo [%current%/%total%] ✖ 錯誤:壓縮「!FOLDER!」時發生問題 ) echo. ) :: 清理臨時檔案 del "%TEMPLIST%" >nul 2>&1 :: ===== 完成 ===== echo === ✅ 全部資料夾已壓縮完成 === echo 來源:%SOURCE% echo 輸出:%DEST% echo 共處理:%total% 個資料夾 pause |
Direct link: https://paste.plurk.com/show/hA8TTwP3ZzKsOwYttt0Z