Batch file 批处理文件在被告知转到时不跳过行

Batch file 批处理文件在被告知转到时不跳过行,batch-file,goto,Batch File,Goto,我在这里使用了一些goto,但每当我尝试该文件时,它会在尝试之前直接转到:john:brutus。这是为什么?我如何修复它 @echo off echo --------------------------- echo System Online echo --------------------------- echo. echo Select Tool: goto :toolselect :toolselect set /p choosetool=Enter a number to sel

我在这里使用了一些goto,但每当我尝试该文件时,它会在尝试之前直接转到:john:brutus。这是为什么?我如何修复它

@echo off

echo ---------------------------
echo System Online
echo ---------------------------
echo.
echo Select Tool:
goto :toolselect
:toolselect
set /p choosetool=Enter a number to select Tool: 
if %choosetool%=='1' goto :hydra
if %choosetool%=='2' goto :john
if %choosetool%=='3' goto :brutus
if %choosetool%=='4' goto :nmap
if %choosetool%=='5' goto :python
if %choosetool%=='' goto :exit

:john
start OpenJohn.bat

:brutus
start C:\Users\user\Desktop\Tools\Brutus.lnk

改为尝试此块-双引号提供安全比较,并包含有毒字符。捕捉无效输入的行会让您意识到所有比较都不起作用

set "choosetool="
set /p "choosetool=Enter a number to select Tool: "
if "%choosetool%"=="1" goto :hydra
if "%choosetool%"=="2" goto :john
if "%choosetool%"=="3" goto :brutus
if "%choosetool%"=="4" goto :nmap
if "%choosetool%"=="5" goto :python
if "%choosetool%"=="" goto :exit
echo invalid input
goto :EOF

基本问题是,如果
语句中的
==
==
两侧的字符串匹配,则左侧的不带引号的字符串将永远不会与右侧的带引号的字符串匹配,这一点由foxidrive解决。第二个问题是,批量只需在直通标签上充电;它们与其他语言中的过程不同,因此,由于没有
如果
匹配ESM,则执行
:john
中的命令,然后执行
:brutus
中的命令,依此类推,直到遇到GOTO或文件结尾、EXIT或外部批处理文件名。请注意,
goto:eof
(冒号是必需的)表示“转到文件末尾”(内置标签)