2013-05-17 87 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」結果。不管怎麼說,還是要謝謝你! –