2013-10-03 48 views
0

我在這裏使用了幾個gotos,但是每當我嘗試文件時,它都會直接轉到: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 
+0

的根本問題是''==在'if'聲明匹配STRINGS的''==,所以左邊的加引號的字符串永遠不會匹配引用字符串的兩側上的權利,由foxidrive解決。第二個問題是批次只是直接標籤收費;它們不像其他語言的程序,因此,由於沒有'if' matchm,所以執行':john'中的命令,然後執行':brutus'等命令,直到出現GOTO或文件結束或EXIT或遇到external-batchfile-name。請注意,'goto:eof'(需要冒號)意味着'去文件結尾'(一個內置標籤 – Magoo

回答

1

試試這個塊,而不是 - 雙引號給你一個安全的比較,幷包括有毒字符。接收無效輸入的行可以讓你意識到你的比較沒有任何工作。

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 
相關問題