エコーを使用して感嘆符を表示するにはどうすればいいですか

エコーを使用して感嘆符を表示するにはどうすればいいですか

今日の早い時間に、RAR パスワード復号化ツールの作成を続行していました。パスワードが感嘆符だけのテスト RAR ファイルでテストしていたのですが、復号化ツールを使用すると、「エコーがオフになっています」とだけ表示されます。バグは、コーディングの下部の「エコー」の横にあります。

これは私がこれまでに行った RAR パスワード復号化ツールのコーディングです (よろしければ、他にバグやヒントがあれば教えてください。よろしくお願いします)。

REM ============================================================
REM errorcode401.blogspot.in
@echo off
title Decryptor
mode con: cols=50 lines=50
copy "C:\Program Files\WinRAR\Unrar.exe"
SET PSWD=0
SET DEST=%TEMP%\%RANDOM%
MD %DEST%
:RAR
cls
echo ----------------------------------------------
echo                   GET DETAIL
echo ----------------------------------------------
echo.
SET/P "NAME=Enter File Name : "
IF "%NAME%"=="" goto NERROR
goto GPATH
:NERROR
echo ----------------------------------------------
echo                      ERROR
echo ----------------------------------------------
echo Sorry you can't leave the line blank.
pause
goto RAR
:GPATH
SET/P "PATH=Enter Full Path : "
IF "%PATH%" == "" goto PERROR
goto NEXT
:PERROR
echo ----------------------------------------------
echo                      ERROR
echo ----------------------------------------------
echo Sorry you can't leave the line blank.
pause
goto RAR
:NEXT
IF EXIST "%PATH%\%NAME%" GOTO START
goto PATH
:PATH
cls
echo ----------------------------------------------
echo                     ERROR
echo ----------------------------------------------
echo This file does not Exist.
pause
goto RAR
:START
SET /A PSWD=%PSWD%+1
echo 1q2w!3e
UNRAR E -INUL -P%PSWD% "%PATH%\%NAME%" "%DEST%"
IF /I %ERRORLEVEL% EQU 0 GOTO FINISH
GOTO START
:FINISH
RD %DEST% /Q /S
Del "Unrar.exe"
cls
echo ----------------------------------------------
echo                     CRACKED
echo ----------------------------------------------
echo.
echo PASSWORD FOUND!
echo FILE  = %NAME%
echo CRACKED PASSWORD = %PSWD%
pause>NUL
exit
REM ===========================

答え1

問題がある場合はecho!遅延拡張を有効にするセット。

もし遅延拡張を有効にするが設定されている場合は!特殊文字として扱われ、逃げなければならない^

^特殊文字でもあるため、2 回使用する必要があります。

感嘆符の回避

シェルが EnableDelayedExpansion モードで実行されている場合、! 文字は変数を示すために使用されるため、これを通常の文字として扱う場合はエスケープ (2 回) する必要があります。次のようにします。

^^!


それなしEnableDelayedExpansion

@echo off
echo 1q2w!3e

出力:

1q2w!3e

EnableDelayedExpansion 逃げられない:

@echo off
Setlocal EnableDelayedExpansion
echo 1q2w!3e

出力:

1q2w3e

注意してくださいない !出力に。


EnableDelayedExpansion そして逃げる:

@echo off
Setlocal EnableDelayedExpansion
echo 1q2w^^!3e

出力:

1q2w!3e

遅延拡張を有効にする3 つの方法で設定できます。

  • Setlocal EnableDelayedExpansionバッチファイルでの使用
  • cmdスイッチから始めます/v
  • レジストリの以下HKLMHKCU
[HKEY_CURRENT_USER\Software\Microsoft\コマンドプロセッサ]
「遅延拡張」= (REG_DWORD)
1=有効 0=無効 (デフォルト)

出典遅延拡張を有効にするエスケープ文字、区切り文字、引用符

関連情報