Board logo

标题: [文件操作] [分享]解压缩的批处理怎样不解压子目录的压缩包 [打印本页]

作者: Batcher    时间: 2019-6-12 22:08     标题: [分享]解压缩的批处理怎样不解压子目录的压缩包

  1. @echo off & title 批量处理
  2. color 0a & cd /d %~dp0
  3. ::::::::::可自定义设置区域::::::::::
  4. ::设置图片格式,无需添加*.jpg
  5. set PicExt=*.jpeg,*.png,*.bmp
  6. ::设置压缩包格式
  7. set ArchiveExt=*.rar,*.zip,*.7z
  8. ::设置压缩包解压密码,适用于有统一固定密码的压缩包,
  9. ::设置后针对无密码的压缩包会自动忽略,不影响解压。
  10. ::但针对不同密码的压缩包会出现解压失败的现象。
  11. ::此固定密码留空的话,每个有密码的压缩包都会提示密码输入
  12. set PassWord=
  13. ::设置WinRAR的安装路径
  14. set WinRarDir=%ProgramFiles%\WinRAR
  15. ::设置操作日志记录文件
  16. set Log=%~dp0操作日志记录.Log
  17. :::::::以下为主执行代码区域,请勿修改:::::::
  18. ::设定新的系统环境变量,勿动!!!
  19. set Path=%Path%;%WinRarDir%
  20. ::解压压缩包,并处理对应的文件夹
  21. echo, & echo 正在解压压缩包,并处理对应的文件夹,请等待 ...
  22. for %%a in (%ArchiveExt%) do (
  23.     echo,
  24.     call :Uncompressed "%%~a"
  25.     call :Handle "%%~na"
  26. )
  27. echo, & echo 批量处理操作完成,请按任意键退出。
  28. pause >nul & exit
  29. :Uncompressed
  30. echo 解压 "%~1" 压缩包中 ...
  31. if defined PassWord (set UnPW=-p"%PassWord%") else set "UnPW="
  32. WinRAR x %UnPW% -ad -y "%~s1" * "%~sdp1" -ibck
  33. call :CreatLog "%errorlevel%" "%~1"
  34. goto :eof
  35. :CreatLog
  36. if %~1 equ 0 (
  37.     del /f /q "%~2" >nul 2>nul && (
  38.         echo %date:~,10% %time: =0% -- 解压成功 -- "%~2">>"%Log%"
  39.     ) || (
  40.         echo %date:~,10% %time: =0% -- 解压成功,但无法删除压缩包 -- "%~2">>"%Log%"
  41.     )
  42. )
  43. if %~1 equ 1 echo %date:~,10% %time: =0% -- 发生非致命错误 -- "%~2">>"%Log%"
  44. if %~1 equ 2 echo %date:~,10% %time: =0% -- 发生一个致命错误 -- "%~2">>"%Log%"
  45. if %~1 equ 3 echo %date:~,10% %time: =0% -- 无效校验和,数据损坏 -- "%~2">>"%Log%"
  46. if %~1 equ 4 echo %date:~,10% %time: =0% -- 试图修改锁定的压缩文件 -- "%~2">>"%Log%"
  47. if %~1 equ 5 echo %date:~,10% %time: =0% -- 写入磁盘错误 -- "%~2">>"%Log%"
  48. if %~1 equ 6 echo %date:~,10% %time: =0% -- 文件打开错误 -- "%~2">>"%Log%"
  49. if %~1 equ 7 echo %date:~,10% %time: =0% -- 错误的命令行选项 -- "%~2">>"%Log%"
  50. if %~1 equ 8 echo %date:~,10% %time: =0% -- 内存不足 -- "%~2">>"%Log%"
  51. if %~1 equ 9 echo %date:~,10% %time: =0% -- 文件创建错误 -- "%~2">>"%Log%"
  52. if %~1 equ 10 echo %date:~,10% %time: =0% -- 没有找到与指定的掩码和选项匹配的文件 -- "%~2">>"%Log%"
  53. if %~1 equ 11 echo %date:~,10% %time: =0% -- 密码错误 -- "%~2">>"%Log%"
  54. if %~1 equ 255 echo %date:~,10% %time: =0% -- 用户中断操作 -- "%~2">>"%Log%"
  55. goto :eof
  56. :Handle
  57. echo 处理 "%~1" 文件夹中 ...
  58. pushd "%~1"
  59. for /r %%i in (*) do (
  60.     if not "%%~dpi"=="%~dp1" (
  61.         move "%%~i" >nul 2>nul && (
  62.             echo %date:~,10% %time: =0% -- 文件已移动 -- "%%~i">>"%Log%"
  63.         ) || (
  64.             echo %date:~,10% %time: =0% -- 文件移动失败 -- "%%~i">>"%Log%"
  65.         )
  66.     )
  67. )
  68. for /r /d %%i in (*) do (
  69.     dir /a-d/s/b "%%~i\*" >nul 2>nul
  70.     if errorlevel 1 (
  71.         rd /s/q "%%~i" >nul 2>nul && (
  72.             echo %date:~,10% %time: =0% -- 空文件夹已被删除 -- "%%~i">>"%Log%"
  73.         ) || (
  74.             echo %date:~,10% %time: =0% -- 文件夹被占用,无法删除 -- "%%~i">>"%Log%"
  75.         )
  76.     ) else (
  77.         echo %date:~,10% %time: =0% -- 不是空文件夹 -- "%%~i">>"%Log%"
  78.     )
  79. )
  80. popd
  81. goto :eof
复制代码

作者: Batcher    时间: 2019-6-12 22:10

不要提取路径

第44行分别试试这几个参数看看哪个是你想要的效果:
WinRAR x %UnPW% -ad -y "%~s1" * "%~sdp1" -ibck -ep
WinRAR x %UnPW% -ad -y "%~s1" * "%~sdp1" -ibck -ep1
WinRAR x %UnPW% -ad -y "%~s1" * "%~sdp1" -ibck -ep2
WinRAR x %UnPW% -ad -y "%~s1" * "%~sdp1" -ibck -ep3
作者: Batcher    时间: 2019-6-12 22:12

可以不要解压当前目录的 子目录的压缩包吗

第73、82行的 /r 删掉试试




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2