2016-11-18 169 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中,建议使用'$?'代替像这样检查变量值,除非您需要稍后使用该变量 –