簡體   English   中英

將if語句添加到cmd.exe腳本

[英]Add if statement to cmd.exe script

我有一個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)不知道... DO IF %i (@echo %i) IF NOT %i (@echo 0) ,但它會返回( was unexpected at this time很令人困惑。
謝謝。

嘗試這個:

@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

如果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的行。

您可以通過以下方式在DO內執行多個語句:

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

其行中的每個命令按'()'分組。 希望這可以幫助...

不是你的問題的直接答案,而是實現你的目標的另一種方式(假設它是一個主機存在/可達的測試)將使用條件執行:
ping -n 1 -4 host1.internal >nul && echo "Host replied" || echo "Host not replied"

這使用命令返回的狀態(在此實例中為ping)來執行適當的命令 - &&表示成功和|| 失敗了。 您也可以使用errorlevel測試,但我個人覺得條件更易讀,特別是直接在命令行上。

額外的好處是它不依賴於語言(ping返回Win中各種語言的本地化字符串)。

這是檢查ping成功或失敗的另一種方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM