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 88 89 | GrCa版本 @echo off :: 啟用 UTF-8 編碼以支援日文、中文等 Unicode 字元 chcp 65001 >nul :: 啟用延遲變數展開 setlocal enabledelayedexpansion :: === 設定基本參數 === set "SOURCE=E:\E-Download" :: 來源資料夾 set "DEST=E:\E-Downloadzip" :: 輸出資料夾 set "7ZEXE=C:\Program Files\7-Zip\7z.exe" :: 7-Zip 執行檔路徑 set "LOG=%DEST%\compression_log.txt" :: 日誌檔案 :: === 檢查環境 === if not exist "%7ZEXE%" ( echo [✖] 錯誤:找不到 7-Zip 程式於「%7ZEXE%」 >> "%LOG%" echo [✖] 錯誤:找不到 7-Zip 程式於「%7ZEXE%」 pause exit /b 1 ) if not exist "%SOURCE%" ( echo [✖] 錯誤:來源資料夾不存在「%SOURCE%」 >> "%LOG%" echo [✖] 錯誤:來源資料夾不存在「%SOURCE%」 pause exit /b 1 ) :: === 建立輸出資料夾 === if not exist "%DEST%" ( echo [!] 建立輸出資料夾:%DEST% >> "%LOG%" echo [!] 建立輸出資料夾:%DEST% mkdir "%DEST%" ) :: === 計算總資料夾數量 === set /a total=0 for /f "usebackq delims=" %%A in (`powershell -nologo -command ^ "Get-ChildItem -Path '%SOURCE%' -Directory | Sort-Object CreationTime | ForEach-Object { $_.FullName }"`) do set /a total+=1 echo [i] 找到 %total% 個資料夾需要壓縮。 >> "%LOG%" echo [i] 找到 %total% 個資料夾需要壓縮。 :: === 開始壓縮 === echo [*] %date% %time% 開始壓縮作業 >> "%LOG%" set /a current=0 for /f "usebackq delims=" %%F in (`powershell -nologo -command ^ "Get-ChildItem -Path '%SOURCE%' -Directory | Sort-Object CreationTime | ForEach-Object { $_.FullName }"`) do ( set /a current+=1 set "FULLPATH=%%F" set "FOLDER=%%~nxF" set "ARCHIVE=%DEST%\!FOLDER!.7z" :: 檢查目標檔案是否已存在 set "COUNTER=0" set "BASE_NAME=%DEST%\!FOLDER!.7z" set "ARCHIVE=!BASE_NAME!" :CHECK_DUPLICATE if exist "!ARCHIVE!" ( set /a COUNTER+=1 set "ARCHIVE=%DEST%\!FOLDER!_!COUNTER!.7z" goto CHECK_DUPLICATE ) :: 檢查資料夾是否為空 dir "!FULLPATH!\*" /a-d >nul 2>&1 if !errorlevel! equ 0 ( echo [%current%/%total%] ▷ 壓縮中:!FOLDER! >> "%LOG%" echo [%current%/%total%] ▷ 壓縮中:!FOLDER! "%7ZEXE%" a -t7z -mx=5 "!ARCHIVE!" "!FULLPATH!\*" >> "%LOG%" 2>&1 if !errorlevel! equ 0 ( echo [%current%/%total%] ✓ 完成:!FOLDER! >> "%LOG%" echo [%current%/%total%] ✓ 完成:!FOLDER! ) else ( echo [%current%/%total%] ✖ 錯誤:壓縮「!FOLDER!」時發生問題 >> "%LOG%" echo [%current%/%total%] ✖ 錯誤:壓縮「!FOLDER!」時發生問題 ) ) else ( echo [%current%/%total%] [-] 跳過:!FOLDER! 是空的 >> "%LOG%" echo [%current%/%total%] [-] 跳過:!FOLDER! 是空的 ) echo. ) :: === 完成 === echo [*] %date% %time% 全部資料夾壓縮完成 >> "%LOG%" echo === ✅ 全部資料夾已壓縮完成 === echo 來源:%SOURCE% echo 輸出:%DEST% echo 共處理:%total% 個資料夾 pause |
Direct link: https://paste.plurk.com/show/hWQGzpusGXHie3YZmgjK