powershell 批量解压带密码的ZIP文件
生活随笔
收集整理的這篇文章主要介紹了
powershell 批量解压带密码的ZIP文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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
注意要將Ionic.Zip.dll放在與腳本同一目錄下
總結
以上是生活随笔為你收集整理的powershell 批量解压带密码的ZIP文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 相位型LCOS空间光调制器介绍
- 下一篇: 电子元件开头字母