标题: [文件操作] [分享]批处理解压缩并判断压缩包内容是单个文件夹还是多个文件 [打印本页]
作者: Batcher 时间: 2022-3-22 21:50 标题: [分享]批处理解压缩并判断压缩包内容是单个文件夹还是多个文件
【问题描述】
咨询一下大家,如何实现类似bandizip的【自动解压】功能。就是不管压缩包是一个文件夹,还是多个文件,解压后文件都在一个文件夹里面。
比如,用某种方法可以判断压缩包里面是一个文件夹,还是多个文件,如果是单个文件就调用7z解压到【压缩包名字】文件夹。如果压缩包里面是多个文件夹,那就先创建一个【压缩包名字】文件夹,再把多个文件解压倒里面去。
这样不论压缩包里面是单独一个文件夹还是多个文件的形式,解压都会得到一个【压缩包名字】的文件夹了
这里忘说了,还要判断同名文件夹加(1)的序号
总结一下:
1.写一个脚本,里面功能是,调用解压软件判断压缩包内容,在执行对应的解压
<1>判断压缩包内容是【文件夹】还是【多个文件】
<2>【文件夹】调用【解压到当前目录】
<3>【多个文件】调用【解压到xxxx文件夹】
2.给压缩包格式注册右键菜单,名字为【智能解压】
<1>压缩包选择【智能解压】后,会把路径穿参数给1.的脚本执行
作者: Batcher 时间: 2022-3-22 21:50
【解决方案】- @echo off
- REM 根据自己电脑实际情况设置 7-Zip 的路径
- set "path=C:\Program Files\7-Zip;%path%"
- REM 执行代码之后检查日志文件是否有报错提示
- set "LogFile=MyUncompress.log"
-
- cd /d "%~dp0"
- >"%LogFile%" type nul
- for /f "delims=" %%i in ('dir /b /a-d *.zip') do (
- if exist "%%~ni" (
- >>"%LogFile%" echo 存在同名文件夹:"%%~ni",跳过"%%i"
- ) else (
- md "%%~ni"
- 7z.exe x "%%i" -o"%%~ni"
- pushd "%%~ni"
- dir /b /a-d >nul 2>&1
- if errorlevel 1 (
- move "%%~ni\*" .
- for /f "delims=" %%j in ('dir /b /ad "%%~ni"') do (
- move "%%~ni\%%j" .
- )
- rd "%%~ni"
- )
- popd
- )
- )
复制代码
这个代码没有考虑“智能解压”,因为这个需求本身有些不太符合逻辑的地方。
例如当前目录下有压缩包:
1.zip
2.zip
...
100.zip
无规律的“同名文件夹”:
2
3(1)
3(5)
18
18(1)
..
“智能解压”之后就完全乱套了,根本无法对应。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |