01 前言

某天,有人问能不能批量解压N个带密码的ZIP文件(密码各不一样),一个一个解压太麻烦。想了一下,应该可以,那就搞起来。

02 正文

1、准备密码文件

格式要求:
1、文件编码为ASCII(一般系统默认)
2、包含两列:第一列为文件名(不带后缀,默认会加.zip后缀),第二列为对应的解压密码。中间以空格或TAB隔开。

如图:

2、准备DLL

解压工具很多,此处用Ionic.Zip.dll。找不到下载链接的可以到这下载。下载完成后最好放在与下文的脚本同一目录下。

3、执行脚本

代码如下:

<#
# 2018-11-20  By Hokis
# 说明:
# 第一个输入:密码文件(命名为:密码.txt)所在位置。可以直接确定跳过,则默认 密码.txt 文件与当前脚本是在同一路径下
# 第二个输入:压缩文件所在位置。可以直接确定跳过,则默认 压缩文件 与当前脚本是在同一路径下
#>
#提示
$ws = New-Object -ComObject WScript.Shell
#输入
$pwdPath = Read-Host -Prompt "请输入密码文件(密码.txt)所在路径:"
#留空则默认当前路径
$gl = Get-Location
if(-not $pwdPath){$pwdPath = $gl.Path.ToString()
}
#载入dll
[System.Reflection.Assembly]::LoadFrom($gl.Path.ToString()+"\Ionic.Zip.dll") >$null
#判断是否存在
if(-not (Test-Path ($pwdPath + "\密码.txt"))){$n1=$ws.popup("找不到文件:密码.txt !",0,"提示",0 + 64)
}
else{$souPath = Read-Host -Prompt "请输入待解压的zip文件所在路径:"if(-not $souPath){$souPath = $gl.Path.ToString()}$savePath = $souPath + "\解压"if(-not (Test-Path $savePath)){mkdir $savePath >$null}# 读取带密码文件内容$lines = Get-Content -Path ($pwdPath + "\密码.txt")#按行读取foreach ($line in $lines){#分隔文件名和密码$items = [regex]::split($line, '[\s]+')if ($items.Length -gt 1){     #拼接zip文件全路径$SourceFile = $souPath + "\" + $items[0] + ".zip" #进行解压$zip = [Ionic.Zip.ZipFile]::Read($SourceFile)$zip.Password = $items[1]$zip.ExtractExistingFile= [Ionic.Zip.ExtractExistingFileAction]::OverwriteSilently #覆盖文件$zip.ExtractAll($savePath)$zip = $null}}#完成$ws.popup("解压完成!",0,"提示",0 + 64) | out-null
}
$gl = $null
$ws = $null

代码另存为.ps1,右键,“使用Powershell运行”即可,根据提示输入必要的参数。如不能运行,参考【此处】解决。
执行完成后,会在当前脚本的目录生成一个叫解压的文件夹,里面即所有的解压结果。

03 后记

如果本地装有支持命令行形式的解压软件(如WinRAR),调用一下也是可以的,就不必下载额外的DLL。

04 更新

  • 2020-06-03
  1. 处理文件名中的中文乱码问题
  2. 压缩powershell代码成一行,方便存为.bat,双击即可调用
@echo off
rem 第一个输入:密码文件(命名为:密码.txt)所在位置。可以直接确定跳过,则默认 密码.txt 文件与当前脚本是在同一路径下
rem 第二个输入:压缩文件所在位置。可以直接确定跳过,则默认 压缩文件 与当前脚本是在同一路径下
cd /d %~dp0
powershell.exe -command "$ws=New-Object -ComObject WScript.Shell;$pwdPath=Read-Host -Prompt '请输入密码文件(密码.txt)所在路径:';$gl=Get-Location;if(-not $pwdPath){$pwdPath=$gl.Path.ToString();}[System.Reflection.Assembly]::LoadFrom($gl.Path.ToString()+'\Ionic.Zip.dll')>$null;if(-not (Test-Path ($pwdPath+'\密码.txt'))){$n1=$ws.popup('找不到文件:密码.txt !',0,'提示',0+64);}else{$souPath=Read-Host -Prompt '请输入待解压的zip文件所在路径:';if(-not $souPath){$souPath=$gl.Path.ToString();};$savePath=$souPath+'\解压';if(-not (Test-Path $savePath)){mkdir $savePath>$null;};$lines=Get-Content -Path ($pwdPath+'\密码.txt');foreach($line in $lines){$items=[regex]::split($line,'[\s]+');if($items.Length -gt 1){$SourceFile=$souPath+'\'+$items[0]+'.zip';$ro=new-object Ionic.Zip.ReadOptions;$ro.Encoding=[System.Text.Encoding]::Default;$zip=[Ionic.Zip.ZipFile]::Read($SourceFile,$ro);$zip.Password=$items[1];$zip.ExtractExistingFile=[Ionic.Zip.ExtractExistingFileAction]::OverwriteSilently;$zip.ExtractAll($savePath);$zip=$null;}};$ws.popup('解压完成!',0,'提示',0+64)|out-null;};$gl=$null;$ws=$null;"
pause

注意要将Ionic.Zip.dll放在与脚本同一目录下

powershell 批量解压带密码的ZIP文件相关推荐

  1. Ubuntu下使用unzip或p7zip解压带密码的zip文件

    有几个zip文件带密码,需要在Ubuntu下解压. 如果使用命令行工具的话,可以使用下面的工具解压 , unzip -P password file.zip 如果你需要解压后的文件都放到一个目录下,不 ...

  2. linux上 用unzip命令解压带密码保护的 zip 文件报错 unsupported compression method 99

    1.问题: Linux上用 unzip 命令解压带密码保护的 zip 文件报错 unsupported compression method 99 2.解决办法: mac自带的解压工具,无法解密加密的 ...

  3. 使用bat脚本调用bandzip批量解压同密码的zip压缩包

    前言 4.23是世界读书日,各种各样的宣传铺天盖地. 小编的朋友通过微信平台渠道获取了kindle的电子书资源,小编也收到了朋友的馈赠 其中有一个文件夹下面是80多个压缩包,小编吭哧吭哧解压了10个压 ...

  4. 关于使用zip4j实现解压与压缩文件,以及向压缩文件中添加文件 , 解压带密码的压缩文件 , 向压缩文件添加密码

    解压与压缩文件 1.Zip4j介绍 zip4j官网:http://www.lingala.net/zip4j/ 可以在"download"页面下载官方示例进行学习. 特征: 从Zi ...

  5. 压缩或者解压带密码的ZIp包

    法一: 引用Ionip.ZIP.DLll /// <summary>         /// 压缩文件夹         /// </summary>         /// ...

  6. php 解压有密码的zip文件_文件解压引发的getshell

    声明! 本文仅供学习和研究,由于传播.利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,海青实验室及文章作者不承担任何责任.安全狗海青实验室拥有此文章的修改和解释权,如欲转 ...

  7. java压缩文件详解_Java解压和压缩带密码的zip文件过程详解

    前言 JDK自带的ZIP操作接口(java.util.zip包,请参看文章末尾的博客链接)并不支持密码,甚至也不支持中文文件名. 为了解决ZIP压缩文件的密码问题,在网上搜索良久,终于找到了winzi ...

  8. PHP 解压带密码的压缩包(ZIP|7Z|RAR等)

    因为平常经常要解压很多带密码的压缩包,索性想写个程序自动去密码本拿来解压 用了下go  结果go不支持解压带密码的 所以拿起老本行php来做,但原生拓展只有zip( ZipArchive)或者RAR没 ...

  9. Qt解压带有密码的加密文件

    简单的解密一个压缩包,可以使用`#include "JlCompress.h"`中的函数进行静态操作.如果你只是需要简单的应用那么,这个文件中的功能就基本可以满足了. 在我们开发过 ...

最新文章

  1. [JS] 事件冒泡,阻止事件冒泡,事件的三个阶段(捕获,目标,冒泡)
  2. android的数据存储方式有哪几种方式,android存储数据的几种方式比较
  3. ios framework 开发 之 实战二 ,成功
  4. java 线程包_Java 多线程——工具包
  5. 第30课 棋盘上的学问 《小学生C++趣味编程》
  6. vue 代理设置 访问图片_详解Vue源码之数据的代理访问
  7. 【邀请函】第十届中国电子政务高峰论坛即将开幕
  8. websocket的加密和解密过程
  9. Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)
  10. 在线作图丨数据降维分析④——NMDS分析
  11. 【NodeJS】Codecademy学习笔记
  12. 什么是取整?有几种取整方式?C语言又是哪种方式?取模取余一样吗?
  13. Postman 开发团队共享接口协作调试
  14. 用 JAVA 实现微信第三方登录
  15. 关于 Vue.js 的那些事儿
  16. 神经网络训练平台,在线神经网络训练
  17. 安卓开发——安卓界面布局笔记
  18. Python运算符优先级与结合性
  19. ccsa安学网小程序_CCSA安学网题库1
  20. 用html5实现一个播放器,6 个基于 HTML5 实现的多媒体播放器

热门文章

  1. Cartographer、Gmapping、Hector、Karto四种SLAM建图算法的优缺点概述及安装
  2. linux ibm mq 安装,消息发送与接收
  3. 算法-----求n以内素数(质数)
  4. 库存监控 - 异常检测算法
  5. java基于ssm奶茶店进销存系统
  6. 充电桩动态管理系统java_一种充电桩管理系统及其使用方法
  7. Quartus II SignalTap使用
  8. 遥感(3):航空遥感和航测成图
  9. 联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码
  10. 【大数据分析常用算法】6.共同好友