如何使用 echo 显示感叹号

lol*_*189 3 windows batch command-line batch-file

今天早些时候,我继续制作 RAR 密码解密器。我在一个测试 RAR 文件上测试它,密码只是一个感叹号,但是当我使用我的 Decryptor 时,它只说“Echo 已关闭”。该错误位于编码底部的“回声”旁边。

这是我到目前为止所做的 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 ===========================
Run Code Online (Sandbox Code Playgroud)

Dav*_*ill 5

如果您有问题,echo荷兰国际集团!,那么你必须EnableDelayedExpansion集。

如果EnableDelayedExpansion设置,然后!被视为特殊字符,必须进行转义^

^ 必须使用两次,因为它也是一个特殊字符。

转义感叹号

当 shell 在 EnableDelayedExpansion 模式下运行时,! 字符用于表示变量,因此如果您希望将其视为常规字符,则必须对其进行转义(两次),您应该这样做:

^^!


没有EnableDelayedExpansion

@echo off
echo 1q2w!3e
Run Code Online (Sandbox Code Playgroud)

输出:

1q2w!3e
Run Code Online (Sandbox Code Playgroud)

EnableDelayedExpansion 和没有转义

@echo off
Setlocal EnableDelayedExpansion
echo 1q2w!3e
Run Code Online (Sandbox Code Playgroud)

输出:

1q2w3e
Run Code Online (Sandbox Code Playgroud)

注意输出中的缺失 !


随着EnableDelayedExpansion 和逃避

@echo off
Setlocal EnableDelayedExpansion
echo 1q2w^^!3e
Run Code Online (Sandbox Code Playgroud)

输出:

1q2w!3e
Run Code Online (Sandbox Code Playgroud)

EnableDelayedExpansion可以通过三种方式设置:

  • 使用Setlocal EnableDelayedExpansion批处理文件
  • 启动cmd/v开关。
  • 在注册表下HKLMHKCU
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
“延迟扩展”=(REG_DWORD)
1=启用 0=禁用(默认)

EnableDelayedExpansion转义字符、分隔符和引号