将if语句添加到cmd.exe脚本

时间:2013-05-17 06:49:26

标签: windows command-line cmd

我有一个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而没有任何其他内容。我想添加if else语句,这样如果返回的值是空的空格,则返回0.

我尝试这样做:... DO IF %i (@echo %i) IF NOT %i (@echo 0),但它返回( was unexpected at this time,这非常令人困惑。
感谢。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

说明

如果找到字符串,则FIND返回成功(ERRORLEVEL 0),如果找不到字符串,则失败(ERRORLEVEL 1)。

如果先前命令成功,则&&运算符有条件地执行命令,如果先前命令失败,则||有条件地执行。 ||必须转发为^|^|,原因与管道转义相同。 ECHO只是打印第5个令牌中有0的行。

答案 2 :(得分:0)

您可以通过以下方式在DO内执行多个语句:

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

其行中的每个命令按'()'分组。希望这会有所帮助...

答案 3 :(得分:0)

不是您问题的直接答案,而是实现目标的另一种方式(假设它是主机存在/可达的测试)将使用条件执行:
ping -n 1 -4 host1.internal >nul && echo "Host replied" || echo "Host not replied"

这使用命令返回的状态(在此实例中为ping)执行适当的命令 - &&表示成功,||表示失败。您也可以使用errorlevel测试,但我个人觉得条件更易读,特别是直接在命令行上。

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

答案 4 :(得分:0)

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

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