2016-11-18 181 views
0

我有我的代碼有問題netstat命令..批處理 - 在IF語句

SET con = netstat -a -n | find "127.0.0.1:3306" 
if "%con%" == "" (
    telnet 127.0.0.1 3306 
) 
pause 

每當我執行這個命令運行telnet命令。

其實當我手動尋找netstat -a -n | find "127.0.0.1:3306"它不等於""%con%總是設置爲"",爲什麼?

我做錯了什麼?

+2

您正在將Windows shell與一個有用的Linux shell混淆。 – LinuxDisciple

+0

是的,顯然我是一個Linux用戶:D這就是爲什麼我需要幫助。 Windows Shell總是讓我的邏輯混淆不清...... – 13loodH4t

+0

'SET con = netstat -a -n |找到「127.0.0.1:3306」'設置一個名爲''con con''的變量(後面的空格)爲一個值''netstat -a -n |找到「127.0.0.1:3306」「(前面有空格)。它不執行該命令。你沒有'%con%'但是'%con%',因此打印'%con%'會給你一個空字符串 –

回答

3

你可以嘗試這樣的事情。

netstat -a -n |find "127.0.0.1:3306" >nul 
if ERRORLEVEL 1 (
telnet 127.0.0.1 3306 
) 

您的方法看起來像一個通用的Linux shell解決方案,但Windows批處理沒有那麼有用或靈活。

的方法上面使用從「查找」返回代碼,以確定是否要運行telnet。那我搞砸了一段

的一件事是ERRORLEVEL <number>作品像ERRORLEVEL GE <number>ERRORLEVEL EQ <number>,所以ERRORLEVEL 0始終是真實的。

+1

你可以使用'if%errorlevel%== 1'來實現相等。 NT cmd也支持其他比較運算符 –

+0

,即使在Linux中,建議使用'$?'代替像這樣檢查變量值,除非您需要稍後使用該變量 –