web-dev-qa-db-ja.com

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

今日の初め、私はRAR PasswordDecryptorの作成を続けていました。パスワードが感嘆符であるテストRARファイルでテストしていましたが、Decryptorを使用すると、「エコーがオフになっています」とだけ表示されます。バグは、コーディングの下部、「エコー」と表示されている場所の隣にあります。

これは、私がこれまでに行ったRAR Password Decryptorのコーディングです(問題がなければ、バグを教えて、ヒントを教えてください)。

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 ===========================
3
lolz189

echoing !に問題がある場合は、 EnableDelayedExpansion が設定されています。

EnableDelayedExpansion が設定されている場合、!は特殊文字として扱われ、^でエスケープする必要があります。

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

感嘆符のエスケープ

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

^^!


EnableDelayedExpansionなし:

@echo off
echo 1q2w!3e

出力:

1q2w!3e

EnableDelayedExpansionあり、エスケープなし

@echo off
Setlocal EnableDelayedExpansion
echo 1q2w!3e

出力:

1q2w3e

出力にmissing!があることに注意してください。


EnableDelayedExpansionとエスケープの場合:

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

出力:

1q2w!3e

EnableDelayedExpansion は、次の3つの方法で設定できます。

  • バッチファイルでSetlocal EnableDelayedExpansionを使用する
  • cmd/vスイッチで開始します。
  • HKLMまたはHKCUの下のレジストリ内
 [HKEY_CURRENT_USER\Software\Microsoft\Command Processor] 
 "DelayedExpansion" =(REG_DWORD)
 1 =有効0 =無効(デフォルト)

ソース EnableDelayedExpansionエスケープ文字、区切り文字、引用符

5
DavidPostill