Windows 命令行/批处理文件检查 7zip 密码是否正确?

Windows 命令行/批处理文件检查 7zip 密码是否正确?

在 Windows 批处理文件中,有没有办法检查压缩文件的 7zip 密码是否正确?

我想检查它是否成功,继续执行脚本(使用调用或转到例程),如果它不成功则状态密码不正确然后会循环回来再次询问密码。

我知道我可以使用测试标志,7z t -p%password% <path>但不确定如何读取结果并自动确定它是否正确。

谢谢。

答案1

您可以使用条件执行/运算符&&||

@echo off 

cd /d "%~dp0" & title <nul & title ..\%~nx0

:Ask_Again
set /p "password= Enter Passowrd: "

"C:\Program Files\7-Zip\7z.exe" t -p%password% Q1543606.7z >nul 2>nul && (
  echo/Your Password input: zOk! & goto :Next
  ) || set Password=<nul && goto :Ask_Again

:Next
rem :: So, continue...
rem :: Do more here...
Goto :Eof


如果你在 Windows 10 上使用它,你还可以使用一些额外的答案/代码,并利用ANSI 转义码支持屏蔽/隐藏密码输入类型...

  • 对于在 bat 中屏蔽输入,你可以使用以下解决方案@Aacini在此回答

  • 要删除/移除用户输入密码的行,您可以使用以下解决方案@LotPings在此回答

  • 为了清除输入的命令行的历史记录(也删除密码),从Doskey缓冲区/历史记录中,从而防止在按下键(箭头、F1、F3 等...)时出现,您可以使用以下解决方案@不是我在此回答

下一个代码旨在展示如何在单个文件/执行中一起使用上述答案的选项来回答您的问题。

@echo off && setlocal enabledelayedexpansion

cd/d "%~dp0" & color 0a & title <nul && title ..\%~nx0
set "_full_7z_path=F:\SUPER_USER\Q1543606\Q1543606.7z"
"%__APPDIR__%Certutil.exe" -decode -f "%~f0" "%temp%\2L.bin" >nul 2>&1 & goto :Ask_Again
-----BEGIN CERTIFICATE-----  G1sxRhtbMEobWzFGG1swSg0K  -----END CERTIFICATE-----

:Ask_Again
set /p "=_" < nul > "Enter password"
findstr /A:1E /V "^$" "Enter password" nul >con
del "Enter password" && set /P "password="
color 0a & type "%temp%\2l.bin"

%__APPDIR__%doskey.exe /reinstall
%__APPDIR__%doskey.exe /listsize=0
%__APPDIR__%doskey.exe /listsize=50

"C:\Program Files\7-Zip\7z.exe" t -p!password! "%_full_7z_path%" >nul 2>&1  && (
  echo/Your Password input: zOk^!! & goto :Next
  ) || set Password=<nul & goto :Ask_Again

:Next
rem :: So, continue...
rem :: Do more here...
del /q /f "%temp%\2l.bin"
set password=<nul && endlocal && goto :Eof
  • 您可以在下面看到结果/输出:

在此处输入图片描述

观察:请记住,如果您的密码包含任何特殊字符,则可能需要转义,还要分别输入完整路径file.7z7z.exe......

  • 关于此bat/cmd中Base64字符串在文件中解码“%temp%\2l.bin

在此处输入图片描述

相关内容