[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [分享]批处理解压缩并判断压缩包内容是单个文件夹还是多个文件

【问题描述】

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

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

2.给压缩包格式注册右键菜单,名字为【智能解压】
   <1>压缩包选择【智能解压】后,会把路径穿参数给1.的脚本执行
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

【解决方案】
  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)
..

“智能解压”之后就完全乱套了,根本无法对应。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表