Board logo

标题: [文件操作] [分享]批处理解压缩并判断压缩包内容是单个文件夹还是多个文件 [打印本页]

作者: Batcher    时间: 2022-3-22 21:50     标题: [分享]批处理解压缩并判断压缩包内容是单个文件夹还是多个文件

【问题描述】

咨询一下大家,如何实现类似bandizip的【自动解压】功能。就是不管压缩包是一个文件夹,还是多个文件,解压后文件都在一个文件夹里面。
比如,用某种方法可以判断压缩包里面是一个文件夹,还是多个文件,如果是单个文件就调用7z解压到【压缩包名字】文件夹。如果压缩包里面是多个文件夹,那就先创建一个【压缩包名字】文件夹,再把多个文件解压倒里面去。
这样不论压缩包里面是单独一个文件夹还是多个文件的形式,解压都会得到一个【压缩包名字】的文件夹了
这里忘说了,还要判断同名文件夹加(1)的序号

总结一下:
1.写一个脚本,里面功能是,调用解压软件判断压缩包内容,在执行对应的解压
   <1>判断压缩包内容是【文件夹】还是【多个文件】
   <2>【文件夹】调用【解压到当前目录】
   <3>【多个文件】调用【解压到xxxx文件夹】

2.给压缩包格式注册右键菜单,名字为【智能解压】
   <1>压缩包选择【智能解压】后,会把路径穿参数给1.的脚本执行
作者: Batcher    时间: 2022-3-22 21:50

【解决方案】
  1. @echo off
  2. REM 根据自己电脑实际情况设置 7-Zip 的路径
  3. set "path=C:\Program Files\7-Zip;%path%"
  4. REM 执行代码之后检查日志文件是否有报错提示
  5. set "LogFile=MyUncompress.log"
  6. cd /d "%~dp0"
  7. >"%LogFile%" type nul
  8. for /f "delims=" %%i in ('dir /b /a-d *.zip') do (
  9.     if exist "%%~ni" (
  10.         >>"%LogFile%" echo 存在同名文件夹:"%%~ni",跳过"%%i"
  11.     ) else (
  12.         md "%%~ni"
  13.         7z.exe x "%%i" -o"%%~ni"
  14.         pushd "%%~ni"
  15.         dir /b /a-d >nul 2>&1
  16.         if errorlevel 1 (
  17.             move "%%~ni\*" .
  18.             for /f "delims=" %%j in ('dir /b /ad "%%~ni"') do (
  19.                 move "%%~ni\%%j" .
  20.             )
  21.             rd "%%~ni"
  22.         )
  23.         popd
  24.     )
  25. )
复制代码
这个代码没有考虑“智能解压”,因为这个需求本身有些不太符合逻辑的地方。
例如当前目录下有压缩包:
1.zip
2.zip
...
100.zip
无规律的“同名文件夹”:
2
3(1)
3(5)
18
18(1)
..

“智能解压”之后就完全乱套了,根本无法对应。




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