web-dev-qa-db-ja.com

Windowsコマンドライン/バッチファイル7Zipパスワードが正しいかどうかを確認しますか?

Windowsバッチファイルで、zipファイルの7Zipパスワードが正しいかどうかを確認する方法はありますか?

成功したかどうかを確認し、スクリプトを続行します(callまたはgotoルーチンを使用)。成功しなかった場合は、状態パスワードが正しくないため、ループバックしてパスワードを再度要求します。

テストフラグを使用できることはわかっています7z t -p%password% <path>しかし、結果を読み取り、それが正しいかどうかを自動化する方法がわかりません。

ありがとう。

2
HTWingNut

条件付き実行/演算子&&および||を使用できます。

@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エスケープコードサポートを利用してパスワードの入力タイプをマスク/非表示にすることもできます...

  • コウモリの入力をマスクするには、@ Aaciniのソリューションをこのanswer で使用できます。

  • ユーザーがパスワードを入力した使用済み行を削除/削除するには、@ LotPingsからこの-のソリューションを使用できます。 回答

  • 入力したコマンドラインの履歴をDoskey buffers/historyからクリアして(矢印、F1、F3など)押したときに表示されないようにするには、 @ It Was n't Me in this answerからの解決策

次のコードは、上記の回答のオプションを1つのファイル/実行で一緒に使用して質問に回答する方法を示すことを目的としています。

@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
  • 以下に結果/出力を示します。

enter image description here

Obs.:パスワードに特殊文字が含まれている場合はエスケープする必要がある場合があることを忘れないでください。また、それぞれfile.7z7z.exeへのフルパスを入力してください。 ..

  • ファイル "%temp%\2l.binでデコードされたこのbat/cmdのBase64の文字列について

enter image description here

1
It Wasn't Me