[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] PowerShell怎样用7z命令解压带密码的压缩包?

我的电脑桌面上有个带密码的压缩包, 我想使用下面的代码解压出里面的文件,
有个问题就是, 如果判断压缩包带不带密码?
如果带密码: 则弹出输入框输入密码, 直到输入正确的密码再解压, 或者不想解压了,点取消按钮取消操作,
如果不带密码: 直接解压
下面的代码, 输入两次密码后解压出了文件, 但文件都是0k的大小, 求路过大佬指导
  1. cls
  2. Add-Type -AssemblyName Microsoft.VisualBasic
  3. function Unzip-File {
  4.     param(
  5.         [string]$ZipFile,
  6.         [string]$ExtractFolder
  7.     )
  8.     [string]$PathTo7Zip = "C:\Program Files\7-Zip\7z.exe"
  9.    
  10.     # 如果文件存在并且不是一个目录,则执行以下操作
  11.     if (Test-Path -Path $ZipFile -PathType Leaf) {
  12.         # 如果文件有密码,则要求用户输入密码,直到密码正确为止
  13.         do {
  14.             $Password = [Microsoft.VisualBasic.Interaction]::InputBox("请输入密码", "解压缩文件", "", 0, 0)
  15.             if ([string]::IsNullOrEmpty($Password)) {
  16.                 # 如果用户取消了输入,则退出循环
  17.                 exit
  18.             }
  19.             $ErrorActionPreference = 'SilentlyContinue'
  20.             & $PathTo7Zip x $ZipFile "-o$ExtractFolder" "-p$($Password | ConvertTo-SecureString -AsPlainText -Force)"
  21.             $IsCorrect = $?  # 检查是否出现错误
  22.             $ErrorActionPreference = 'Continue'
  23.         } while (!$IsCorrect)
  24.     } else {
  25.         Write-Host "找不到指定的文件。"
  26.     }
  27. }
  28. # 调用函数来解压缩文件
  29. $ZipFile = "$env:USERPROFILE\Desktop\test.zip"   # 压缩包路径
  30. $ExtractFolder = "$env:USERPROFILE\Desktop\test"  # 解压缩路径
  31. Unzip-File -ZipFile $ZipFile -ExtractFolder $ExtractFolder
复制代码

下面的代码是批处理的, 如果输入错误的密码, 窗口直接就关了, 求大佬提导
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set "filename=test.7z"
  4. set "password="
  5. set "path=%path%;C:\Program Files\7-Zip"
  6. for /f "tokens=2 delims=: " %%a in ('7z l -slt "%filename%" ^| findstr /c:"Encrypted = +"') do (
  7.   set "encrypted=%%a"
  8. )
  9. if "%encrypted%"=="+" (
  10.   echo The archive is encrypted.
  11.   for /l %%i in (1, 1, 3) do (
  12.     set /p password=Please enter the password:
  13.     7z t "%filename%" -p"%password%" >nul 2>&1
  14.     if not errorlevel 1 (
  15.       echo Correct password.
  16.       7z x "%filename%" -p"%password%"
  17.       goto end_script
  18.     )
  19.     echo Invalid password, please try again.
  20.   )
  21.   echo Too many attempts, exiting...
  22. ) else (
  23.   echo The archive is not encrypted.
  24.   7z x "%filename%"
  25. )
  26. :end_script
  27. endlocal
复制代码

TOP

回复 2# 小白龙


   经过测试,第一次产生输密码操作在第9行,第二次在第28行。判断压缩包是否加密的命令不对,所以encrypted 的值也不对,就不会有if "%encrypted%"=="+"判断成功后的操作。即使判断成功,第17行 也有问题,set /p赋值password后,应该用!password!表示。
直接解压就好了,有密码会提示的。先判断有无密码,再解压,有点多此一举。不知道楼主是什么目的?
bat小白,请多指教!谢谢!

TOP

回复 3# 77七


    直接用命令行解压时, 只能解压出一个空文件夹, 没有出现输入密码的窗口

TOP

回复 4# 小白龙


   到官网下载最新版7z
  1. @echo off
  2. set "path=%path%;C:\Program Files\7-Zip"
  3. for /f "delims=" %%i in ('dir /b /s /a-d *.7z *.rar *.zip') do (
  4. for /l %%l in (1,1,3) do (
  5. if not defined #"%%i" (
  6. 7z x -y -o"%%~dpi" "%%i" && set #"%%i"=1
  7. )
  8. )
  9. )
  10. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 5# 77七


    执行后CMD窗口过一会儿就崩溃了

TOP

回复 6# 小白龙


   不知道你说的奔溃是什么意思,我这边测试解压有、无密码的7z压缩包均正常。
bat小白,请多指教!谢谢!

TOP

返回列表