标题: [问题求助] PowerShell怎样用7z命令解压带密码的压缩包? [打印本页]
作者: 小白龙 时间: 2023-4-20 14:24 标题: PowerShell怎样用7z命令解压带密码的压缩包?
我的电脑桌面上有个带密码的压缩包, 我想使用下面的代码解压出里面的文件,
有个问题就是, 如果判断压缩包带不带密码?
如果带密码: 则弹出输入框输入密码, 直到输入正确的密码再解压, 或者不想解压了,点取消按钮取消操作,
如果不带密码: 直接解压
下面的代码, 输入两次密码后解压出了文件, 但文件都是0k的大小, 求路过大佬指导- cls
- Add-Type -AssemblyName Microsoft.VisualBasic
-
-
- function Unzip-File {
- param(
- [string]$ZipFile,
- [string]$ExtractFolder
- )
- [string]$PathTo7Zip = "C:\Program Files\7-Zip\7z.exe"
-
- # 如果文件存在并且不是一个目录,则执行以下操作
- if (Test-Path -Path $ZipFile -PathType Leaf) {
- # 如果文件有密码,则要求用户输入密码,直到密码正确为止
- do {
- $Password = [Microsoft.VisualBasic.Interaction]::InputBox("请输入密码", "解压缩文件", "", 0, 0)
-
- if ([string]::IsNullOrEmpty($Password)) {
- # 如果用户取消了输入,则退出循环
- exit
- }
-
- $ErrorActionPreference = 'SilentlyContinue'
- & $PathTo7Zip x $ZipFile "-o$ExtractFolder" "-p$($Password | ConvertTo-SecureString -AsPlainText -Force)"
- $IsCorrect = $? # 检查是否出现错误
- $ErrorActionPreference = 'Continue'
- } while (!$IsCorrect)
- } else {
- Write-Host "找不到指定的文件。"
- }
- }
-
- # 调用函数来解压缩文件
- $ZipFile = "$env:USERPROFILE\Desktop\test.zip" # 压缩包路径
- $ExtractFolder = "$env:USERPROFILE\Desktop\test" # 解压缩路径
-
- Unzip-File -ZipFile $ZipFile -ExtractFolder $ExtractFolder
复制代码
作者: 小白龙 时间: 2023-4-27 07:51
下面的代码是批处理的, 如果输入错误的密码, 窗口直接就关了, 求大佬提导- @echo off
-
- setlocal EnableDelayedExpansion
-
- set "filename=test.7z"
- set "password="
- set "path=%path%;C:\Program Files\7-Zip"
-
- for /f "tokens=2 delims=: " %%a in ('7z l -slt "%filename%" ^| findstr /c:"Encrypted = +"') do (
- set "encrypted=%%a"
- )
-
- if "%encrypted%"=="+" (
- echo The archive is encrypted.
- for /l %%i in (1, 1, 3) do (
- set /p password=Please enter the password:
- 7z t "%filename%" -p"%password%" >nul 2>&1
- if not errorlevel 1 (
- echo Correct password.
- 7z x "%filename%" -p"%password%"
- goto end_script
- )
- echo Invalid password, please try again.
- )
- echo Too many attempts, exiting...
- ) else (
- echo The archive is not encrypted.
- 7z x "%filename%"
- )
-
- :end_script
- endlocal
复制代码
作者: 77七 时间: 2023-4-27 10:40
回复 2# 小白龙
经过测试,第一次产生输密码操作在第9行,第二次在第28行。判断压缩包是否加密的命令不对,所以encrypted 的值也不对,就不会有if "%encrypted%"=="+"判断成功后的操作。即使判断成功,第17行 也有问题,set /p赋值password后,应该用!password!表示。
直接解压就好了,有密码会提示的。先判断有无密码,再解压,有点多此一举。不知道楼主是什么目的?
作者: 小白龙 时间: 2023-4-27 14:52
回复 3# 77七
直接用命令行解压时, 只能解压出一个空文件夹, 没有出现输入密码的窗口
作者: 77七 时间: 2023-4-27 17:13
回复 4# 小白龙
到官网下载最新版7z- @echo off
- set "path=%path%;C:\Program Files\7-Zip"
- for /f "delims=" %%i in ('dir /b /s /a-d *.7z *.rar *.zip') do (
- for /l %%l in (1,1,3) do (
- if not defined #"%%i" (
- 7z x -y -o"%%~dpi" "%%i" && set #"%%i"=1
- )
- )
- )
- pause
复制代码
作者: 小白龙 时间: 2023-4-27 17:27
回复 5# 77七
执行后CMD窗口过一会儿就崩溃了
作者: 77七 时间: 2023-4-27 17:43
回复 6# 小白龙
不知道你说的奔溃是什么意思,我这边测试解压有、无密码的7z压缩包均正常。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |