2013-05-17 172 views
0

我有一个cmd.exe的脚本:添加if语句cmd.exe的脚本

FOR /F "tokens=5 delims==<ms" %i IN ('ping -n 1 -4 host1.internal ^|find "Reply from"') DO @echo %i 

基本上,它返回ping值没有什么别的host1.internal。我想添加如果else语句,以便如果返回的值是空格,则返回0.

我试图这样做:... DO IF %i (@echo %i) IF NOT %i (@echo 0),但它返回(was unexpected at this time,这很混乱。
谢谢。

+0

对不起,但是目前发布的所有4个答案都不是真的有帮助 - 我需要脚本得到的确切响应,如果ping不成功,则返回0.例如,ping ping。它应该返回“10”(如10ms)并且pinging notexistinghost.com它应该返回“0”。 –

+0

在这种情况下,我认为你的问题是,如果没有匹配没有被执行。你必须以另一种方式思考你的代码。我对你尝试的解决方案感到困惑。 –

回答

1

如果FIND失败,然后回显出一行,将解析到您想要的输出。

FOR /F "tokens=5 delims==<ms" %i IN ('ping -n 1 -4 host1.internal ^|find "Reply from"^|^|echo XmXmXmXm0') DO @echo %i 

说明

成功(ERRORLEVEL 0)如果串中发现,失败(ERRORLEVEL 1)如果字符串没有发现FIND回报。

&&如果先前的命令成功,&&有条件地执行命令,如果先前的命令失败,则||有条件地执行。出于与管道转义相同的原因,||必须转义为^|^|。 ECHO只是在第5个标记中打印一个具有0的行。

+0

哇,谢谢,就是我想要的,看起来很酷。接受最好的答案,但是你是否介意/有时间解释实际情况? ('^ |^|'部分和'XmXmXmXm0'部分) –

+1

@the_lay - 添加说明。 – dbenham

1

试试这个:

@echo off&setlocal 
FOR /F "tokens=5 delims==<ms" %%i IN ('ping -n 1 -4 host1.internal ^|find "Reply from"') DO set "replay=%%i" 
if defined replay (echo(%replay%) else echo(0 

..在命令行相同的代码:

FOR /F "tokens=5 delims==<ms" %i IN ('ping -n 1 -4 host1.internal ^|find "Reply from"') DO if "%i" equ "" (echo(0) else echo(%i 
+0

不错!有没有办法让它“一班”?我不想让它成为.bat文件,我希望它可以像这样在cmd.exe中运行。 –

+0

@the_lay - 我做了一个编辑,但不能测试这个。我的'平'具有其他输出。 – Endoro

+1

上次编辑无法工作,因为如果FIND失败,将不会有迭代。请参阅[我的回答](http://stackoverflow.com/a/16606860/1012053)了解有效的单线程。 – dbenham

0

可以执行内部DO多条语句是这样的:

@FOR /L %%i in (1, 1, 5) DO @(
@echo %%i 
@IF %%i==1 (@echo First) 
@IF NOT %%i==1 (@echo Other) 
) 

在每个命令它的行按'()'分组。希望这有助于...

0

不是直接回答你的问题,但实现目标的另一种方法(假设它是一个测试,如果一台主机存在/可到达)是使用条件执行:
ping -n 1 -4 host1.internal >nul && echo "Host replied" || echo "Host not replied"

这使用命令返回的状态(在本例中为ping)执行适当的命令 - &&表示成功,||失败。您也可以使用错误级别测试,但我个人发现条件更具可读性,尤其是直接在命令行上。

额外的加号是不依赖于语言的(ping在Win中返回各种语言的本地化字符串)。

+0

我需要返回数字结果,而不仅仅是“OK”或“Fail”结果。不管怎么说,还是要谢谢你! –

0

这是另一种检查ping成功或失败的方法。

@echo off 
ping -n 1 -4 host1.internal >nul && (echo ping succeeded) || (echo ping failed) 
+0

这也是我最喜欢的:)但OP想要IP的回声... – Endoro

+0

我需要结果返回数字,而不仅仅是“OK”或“Fail”结果。不管怎么说,还是要谢谢你! –