Como faço para mostrar pontos de exclamação usando echo

Como faço para mostrar pontos de exclamação usando echo

Hoje cedo, continuei criando um descriptografador de senha RAR. Eu estava testando em um arquivo RAR de teste com a senha sendo apenas um ponto de exclamação, mas quando uso meu Decryptor tudo o que diz é apenas "Echo foi desligado". O bug está localizado na parte inferior do código, próximo a onde diz "eco".

Esta é a codificação do RAR Password Decryptor que fiz até agora (e se estiver tudo bem, vocês podem me contar mais bugs e me dar algumas dicas, obrigado pessoal).

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

Responder1

Se você está tendo problemas echo, !então você temHabilitar Expansão Atrasadadefinir.

SeHabilitar Expansão Atrasadaé definido, então !é tratado como um caractere especial edeve ser escapadocom ^.

^deve ser usado duas vezes, pois também é um caractere especial.

Escapando dos pontos de exclamação

Quando o shell está sendo executado no modo EnableDelayedExpansion, o ! caractere é usado para denotar uma variável e, portanto, deve ser escapado (duas vezes). Se você deseja tratá-lo como um caractere normal, faça o seguinte:

^^!


Sem EnableDelayedExpansion:

@echo off
echo 1q2w!3e

Saída:

1q2w!3e

ComEnableDelayedExpansion e não há como escapar:

@echo off
Setlocal EnableDelayedExpansion
echo 1q2w!3e

Saída:

1q2w3e

Observe oausente !na saída.


ComEnableDelayedExpansion e escapando:

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

Saída:

1q2w!3e

Habilitar Expansão Atrasadapode ser definido de três maneiras:

  • Usando Setlocal EnableDelayedExpansionem um arquivo em lote
  • Começando cmdpelo /vinterruptor.
  • No registro sob HKLMouHKCU
[HKEY_CURRENT_USER\Software\Microsoft\Processador de Comando]
"DelayedExpansion"= (REG_DWORD)
1=habilitado 0=desabilitado (padrão)

FontesHabilitar Expansão Atrasada,Caracteres de escape, delimitadores e citações

informação relacionada