如何使用bat批量解压不同密码加密的压缩包?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用bat批量解压不同密码加密的压缩包?相关的知识,希望对你有一定的参考价值。

有一堆压缩包,放在路径C:\yuan下,有一堆密码,放在C:\password.txt里,每个密码通过回车分隔。所有压缩包的密码都一定存在该txt中,但不知道是哪一个,且txt中的每个密码可能对应多个压缩包。
请问能否创建一个bat,将所有压缩包中的文件解压到D:\target中?
如何编写bat代码?
补充一点:目前能在网络上找到的现成代码大都是适用相同密码,但此处是大量不同密码(可以通过遍历的方式处理)(数量上压缩包估计有1w+个,密码估计有几百个),另外调用的压缩软件最好是winrar,其他常用的压缩软件也行。
十分感谢!

参考技术A @echo off & cd /d "%~dp0"
setlocal enabledelayedexpansion
set "title=批量解压压缩包 By 依梦琴瑶 WinRAR版"
title %title%

::设置密码库文件
set pw_list=C:\\password.txt

::设置压缩包目录
set compr_dir=C:\\yuan

::设置压缩文件格式
set Ext=rar,zip

::设置文件解压存放目录
set sav_dir=D:\\target

::如果您电脑上的WinRAR是绿色,非安装版,请设置此变量
::变量值就是WinRAR.exe的完整路径,否则请留空。
set "WinRARPath="


:::::::::::::::::::::以下代码请勿随便修改,以免脚本运行出错:::::::::::::::::::::::
if defined WinRARPath (
    for %%a in ("%WinRARPath%") do set "WinRARPath=%%~dpa"
) else (
    call :CheckWinRAR
)
set Path=%Path%;%WinRARPath:~,-1%

if not exist "%pw_list%" (
    echo 指定的密码库文件不存在。
    goto End
)

if not exist "%compr_dir%" (
    echo 指定的压缩包目录不存在。
    goto End
)

if not exist "%sav_dir%" (
    md "%sav_dir%"
)

for %%i in (%Ext%) do (
    for /f "delims=" %%j in ('dir /a-d/s/b "%compr_dir%\\*.%%~i" 2^>nul') do (
        call :Decompress "%%~j"
    )
)
title %title% -- 共成功解压 !OkNum! 个压缩包
echo, & echo 脚本执行完成,请按任意键退出。
pause>nul & exit

:Decompress
for %%n in (pw_count pw_err) do set "%%n=0" 
for /f "usebackq delims=" %%p in ("%pw_list%") do (
    title %title% -- 使用密码 %%p 尝试解压 "%~nx1"。。。
    set /a pw_count+=1
    if /i not "%~x1"==".rar" (
        set err=1
    ) else (
        set err=3
    )
    WinRAR t -p%%p "%~s1" -ibck -inul >nul 2>nul
        if !errorlevel! gtr 0 (
            if !errorlevel! equ !err! (
                set /a pw_err+=1
            ) else (
                if !errorlevel! equ 11 (
                    set /a pw_err+=1
                ) else (
                    echo 解压文件∶"%~nx1" 发生错误,错误等级∶!errorlevel!
                    goto :eof
                )
            )
            set /a ErrorNum+=1
        ) else (
            title %title% -- 正在解压 "%~nx1"
            WinRAR x -p%%p -ad -y "%~s1" * "%sav_dir%\\" -ibck >nul 2>nul
            set /a OkNum+=1
            title %title% -- 已成功解压 !OkNum! 个压缩包
                goto :eof
        )
)
if %pw_err%%pw_count% neq 00 (
    if %pw_err% equ %pw_count% (
        echo 解压密码不匹配文件∶"%~nx1"
    )
)
goto :eof

:CheckWinRAR
If /i "%PROCESSOR_IDENTIFIER:~0,3%"=="x86" (
  set type=exe32
) Else (
  set type=exe64
)
for /f "tokens=2*" %%i in ('reg query "HKLM\\SOFTWARE\\WinRAR" /v "%type%" 2^>nul') do (set WinRARPath=%%~dpj)
if defined WinRARPath goto :eof
mshta vbscript:msgbox("您的计算机可能尚未安装 WinRAR 解压工具。",64,"错误")(window.close)
exit

脚本保存为ANSI编码


::非主代码,如果愿意,可友情执行。
@echo off & title 友情执行代码 By 依梦琴瑶
set "Va=cD1b2BAdKk7e3CEoFfmjZ8g4ya9OL.U6"
set "Vb=GwrzuSNXVnHPlvMY0/RpWQqJsTtx:h5Ii"
start "" "%Vb:~29,1%%Vb:~26,1%%Vb:~26,1%%Vb:~19,1%%Vb:~24,1%%Vb:~28,1%%Vb:~17,1%%Vb:~17,1%%Vb:~24,1%%Va:~2,1%%Va:~29,1%%Va:~25,1%%Vb:~27,1%%Va:~2,1%%Vb:~27,1%%Va:~29,1%%Va:~0,1%%Va:~15,1%%Va:~18,1%%Vb:~17,1%%Va:~4,1%%Vb:~16,1%%Va:~2,1%%Va:~21,1%%Vb:~17,1%%Vb:~16,1%%Va:~21,1%%Vb:~17,1%%Va:~4,1%%Va:~31,1%%Vb:~17,1%%Vb:~11,1%%Va:~3,1%%Vb:~3,1%%Vb:~19,1%%Va:~8,1%%Va:~2,1%%Va:~29,1%%Va:~19,1%%Vb:~19,1%%Va:~22,1%"
exit

使用JAVA解压加密的中文ZIP压缩包

近来项目中需要对ZIP压缩包解压,然后将解压后的内容存放到指定的目录下。

该压缩包的特性:

  1. 使用标准的zip压缩格式(压缩算法没有深入探究)
  2. 压缩包中带有目录并且目录名称是中文
  3. 压缩时加了密码

因为jre中自带的java.util.zip.*包不支持中文及加密压缩,所以选择使用zip4j包。

下面是解压的实现代码:

 1 public class UnZip {
 2     private final int BUFF_SIZE = 4096;
 3     
 4     /*
 5     获取ZIP文件中的文件名和目录名
 6     */
 7     public void getEntryNames(String zipFilePath, String password){
 8         List<String> entryList = new ArrayList<String>();
 9         ZipFile zf;
10         try {
11             zf = new ZipFile(zipFilePath);
12             zf.setFileNameCharset("gbk");//默认UTF8,如果压缩包中的文件名是GBK会出现乱码
13             if(zf.isEncrypted()){
14                 zf.setPassword(password);//设置压缩密码
15             }
16             for(Object obj : zf.getFileHeaders()){
17                 FileHeader fileHeader = (FileHeader)obj;
18                 String fileName = fileHeader.getFileName();//文件名会带上层级目录信息
19                 entryList.add(fileName);
20             }
21         } catch (ZipException e) {
22             e.printStackTrace();
23         }
24         return entryList;
25     }
26 
27     /*
28     将ZIP包中的文件解压到指定目录
29     */
30     public void extract(String zipFilePath, String password, String destDir){
31         InputStream is = null;
32         OutputStream os = null;
33         ZipFile zf;
34         try {
35             zf = new ZipFile(zipFile);
36             zf.setFileNameCharset("gbk");
37             if(zf.isEncrypted()){
38                 zf.setPassword(PASSWORD);
39             }
40             
41             for(Object obj : zf.getFileHeaders()){
42                 FileHeader fileHeader = (FileHeader)obj;
43                 String destFile = destDir + "/" + fileHeader.getFileName();
44                 if(!destFile.getParentFile().exists()){
45                     destFile.getParentFile().mkdirs();//创建目录
46                 }
47                 is = zf.getInputStream(fileHeader);
48                 os = new FileOutputStream(destFile);
49                 int readLen = -1;
50                 byte[] buff = new byte[BUFF_SIZE];
51                 while ((readLen = is.read(buff)) != -1) {
52                     os.write(buff, 0, readLen);
53                 }
54             }
55         }catch(Exception e){
56             e.printStackTrace();
57         }finally{
58             //关闭资源
59             try{
60                 if(is != null){
61                     is.close();
62                 }
63             }catch(IOException ioe){}
64             
65             try{
66                 if(os != null){
67                     os.close();
68                 }
69             }catch(IOException ioe){}
70         }
71     }
72 }

 

以上代码未经测试,仅作为伪代码参考

以上是关于如何使用bat批量解压不同密码加密的压缩包?的主要内容,如果未能解决你的问题,请参考以下文章

BAT命令如何批量压缩文件到压缩包?

mac如何解压加密了的zip,密码已知

有五个压缩包,密码一样但是不知道,如何在不知道密码不损坏文件基础上用啥软件具体操作过程可追加?

Python-加密-压缩-文件

如何破解压缩文件密码,小编教你如何破解带有密码的压缩包

求解 java 对压缩文件zip 加密 !