
[分享]解壓縮的批處理怎樣不解壓子目錄的壓縮包
nclick="copycode($('code0'));">復制代碼
- @echo off & title 批量處理
- color 0a & cd /d %~dp0
- ::::::::::可自定義設置區域::::::::::
- ::設置圖片格式,無需添加*.jpg
- set PicExt=*.jpeg,*.png,*.bmp
- ::設置壓縮包格式
- set ArchiveExt=*.rar,*.zip,*.7z
- ::設置壓縮包解壓密碼,適用于有統一固定密碼的壓縮包,
- ::設置后針對無密碼的壓縮包會自動忽略,不影響解壓。
- ::但針對不同密碼的壓縮包會出現解壓失敗的現象。
- ::此固定密碼留空的話,每個有密碼的壓縮包都會提示密碼輸入
- set PassWord=
- ::設置WinRAR的安裝路徑
- set WinRarDir=%ProgramFiles%WinRAR
- ::設置操作日志記錄文件
- set Log=%~dp0操作日志記錄.Log
- :::::::以下為主執行代碼區域,請勿修改:::::::
- ::設定新的系統環境變量,勿動!!!
- set Path=%Path%;%WinRarDir%
- ::解壓壓縮包,并處理對應的文件夾
- echo, & echo 正在解壓壓縮包,并處理對應的文件夾,請等待 ...
- for %%a in (%ArchiveExt%) do (
- echo,
- call :Uncompressed %%~a
- call :Handle %%~na
- )
- echo, & echo 批量處理操作完成,請按任意鍵退出。
- pause >nul & exit
- :Uncompressed
- echo 解壓 %~1 壓縮包中 ...
- if defined PassWord (set UnPW=-p%PassWord%) else set UnPW=
- WinRAR x %UnPW% -ad -y %~s1 * %~sdp1 -ibck
- call :CreatLog %errorlevel% %~1
- goto :eof
- :CreatLog
- if %~1 equ 0 (
- del /f /q %~2 >nul 2>nul && (
- echo %date:~,10% %time: =0% -- 解壓成功 -- %~2>>%Log%
- ) || (
- echo %date:~,10% %time: =0% -- 解壓成功,但無法刪除壓縮包 -- %~2>>%Log%
- )
- )
- if %~1 equ 1 echo %date:~,10% %time: =0% -- 發生非致命錯誤 -- %~2>>%Log%
- if %~1 equ 2 echo %date:~,10% %time: =0% -- 發生一個致命錯誤 -- %~2>>%Log%
- if %~1 equ 3 echo %date:~,10% %time: =0% -- 無效校驗和,數據損壞 -- %~2>>%Log%
- if %~1 equ 4 echo %date:~,10% %time: =0% -- 試圖修改鎖定的壓縮文件 -- %~2>>%Log%
- if %~1 equ 5 echo %date:~,10% %time: =0% -- 寫入磁盤錯誤 -- %~2>>%Log%
- if %~1 equ 6 echo %date:~,10% %time: =0% -- 文件打開錯誤 -- %~2>>%Log%
- if %~1 equ 7 echo %date:~,10% %time: =0% -- 錯誤的命令行選項 -- %~2>>%Log%
- if %~1 equ 8 echo %date:~,10% %time: =0% -- 內存不足 -- %~2>>%Log%
- if %~1 equ 9 echo %date:~,10% %time: =0% -- 文件創建錯誤 -- %~2>>%Log%
- if %~1 equ 10 echo %date:~,10% %time: =0% -- 沒有找到與指定的掩碼和選項匹配的文件 -- %~2>>%Log%
- if %~1 equ 11 echo %date:~,10% %time: =0% -- 密碼錯誤 -- %~2>>%Log%
- if %~1 equ 255 echo %date:~,10% %time: =0% -- 用戶中斷操作 -- %~2>>%Log%
- goto :eof
- :Handle
- echo 處理 %~1 文件夾中 ...
- pushd %~1
- for /r %%i in (*) do (
- if not %%~dpi==%~dp1 (
- move %%~i >nul 2>nul && (
- echo %date:~,10% %time: =0% -- 文件已移動 -- %%~i>>%Log%
- ) || (
- echo %date:~,10% %time: =0% -- 文件移動失敗 -- %%~i>>%Log%
- )
- )
- )
- for /r /d %%i in (*) do (
- dir /a-d/s/b %%~i* >nul 2>nul
- if errorlevel 1 (
- rd /s/q %%~i >nul 2>nul && (
- echo %date:~,10% %time: =0% -- 空文件夾已被刪除 -- %%~i>>%Log%
- ) || (
- echo %date:~,10% %time: =0% -- 文件夾被占用,無法刪除 -- %%~i>>%Log%
- )
- ) else (
- echo %date:~,10% %time: =0% -- 不是空文件夾 -- %%~i>>%Log%
- )
- )
- popd
- goto :eof

