Jak sprawić, by wykrzykniki były wyświetlane za pomocą echa

1

Wcześniej dzisiaj kontynuowałem tworzenie deszyfratora haseł RAR. Testowałem to na testowym pliku RAR z hasłem będącym jedynie wykrzyknikiem, ale kiedy używam mojego deszyfratora, wszystko mówi tylko: „Echo zostało wyłączone”. Błąd znajduje się na dole kodowania, obok napisu „echo”.

To jest kodowanie dla RAR Password Decryptor, które zrobiłem do tej pory (i jeśli jest w porządku, możesz powiedzieć mi więcej błędów i dać mi kilka wskazówek dzięki ludziom).

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 ===========================
lolz189
źródło
Och, ostatnia 18. linia przepraszam. XD
lolz189 17.04.15
Problemem jest także to, jak sprawić, aby wykrzykniki były wyświetlane w echu, ponieważ wykrzykniki wyłączają echo, gdy chcę, aby wykrzykniki były widoczne (echo włączone) zamiast być kodem.
lolz189 17.04.15
Och, wow, lol, co jest ze mną nie tak, myślę, że wykrzyknik, a nie cudzysłów, znów przepraszam. XD
lolz189 17.04.15
1
echo 1q2w!3ewyjścia 1q2w!3e. Wyjaśnij, na czym polega prawdziwy problem
DavidPostill
3
OK, wiesz, że twoje pytanie ma problemy. Machasz rękami i mówisz „błąd jest w kodzie”, nie mówiąc gdzie. Używasz niewłaściwej nazwy dla postaci, o której mówisz. Zgłaszasz problem, którego nie możemy odtworzyć. Zatrzymaj sklejaniu na komentarzach i naprawić swój questing przez edit ing go. Ponadto, jeśli masz problem z jedną linią, nie musisz publikować 68 linii. Spróbuj edytować plik wsadowy. Usuń duże fragmenty. Jeśli problem będzie się powtarzał, opublikuj krótki skrypt, w którym występuje problem. Jeśli problem zniknie, przyczyną może być ostatni usunięty kod.
Scott,

Odpowiedzi:

4

Jeśli są problemy echoing !wtedy masz EnableDelayedExpansion zestawu.

Jeśli EnableDelayedExpansion jest ustawiony to !jest traktowane jako szczególny charakter i muszą być uciekł z ^.

^ należy użyć dwukrotnie, ponieważ jest to także znak specjalny.

Ucieczka wykrzykników

Gdy powłoka działa w trybie EnableDelayedExpansion,! znak jest używany do oznaczenia zmiennej i dlatego musi być poprzedzony (dwa razy) znakiem ucieczki, jeśli chcesz traktować ją jako zwykły znak:

^^!


Bez EnableDelayedExpansion:

@echo off
echo 1q2w!3e

Wydajność:

1q2w!3e

Bez EnableDelayedExpansion ucieczki :

@echo off
Setlocal EnableDelayedExpansion
echo 1q2w!3e

Wydajność:

1q2w3e

Zauważ brak ! w danych wyjściowych.


Z EnableDelayedExpansion i ucieczka :

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

Wydajność:

1q2w!3e

EnableDelayedExpansion można ustawić na trzy sposoby:

  • Używanie Setlocal EnableDelayedExpansionw pliku wsadowym
  • Począwszy cmdod /vprzełącznika.
  • W rejestrze pod HKLMlubHKCU
[HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor]
„DelayedExpansion” = (REG_DWORD)
1 = włączony 0 = wyłączony (domyślnie)

Źródła EnableDelayedExpansion , Escape Characters, Delimiters and Quotes

DavidPostill
źródło