2011-02-18 32 views

回答

6
@ECHO OFF 
SET output=%USERPROFILE%\output.txt 
IF EXIST "%output%" DEL "%output%" 
FOR /L %%G IN (1, 1, 69) DO (
    CALL :ping 192.168.%%G.3 
    CALL :ping 192.168.%%G.4 
) 
GOTO :EOF 

:ping 
ping -n 1 %1 >NUL && ECHO %1>>"%output%" 

基本上,你用&&添加如果先前的命令(一個&&之前)成功完成時,纔會執行命令(從技術上說,返回的0的退出代碼)。

對於相反的情況也有類似的方法。如果您想對命令的不成功結果執行一些操作,則在其後面輸入||,然後執行您的操作。

編輯

一個說明有關ping。有時你會從路由器得到一個通知,說明主機不可訪問。在這種情況下,ping仍然以0代碼('成功')退出,因爲它確實得到了答覆,即使它來自路由器而不是來自實際主機。

如果您的主機可能出現這種情況,並且您不希望在輸出文件中出現此類誤報,則您必須解析某些關鍵字的輸出ping,以指示ping是否確實成功。到目前爲止,您可以依靠顯示彙總統計信息的行:它們只在回覆來自預期主機時纔會顯示。

所以,這裏的另一種方法:

@ECHO OFF 
SET output=%USERPROFILE%\output.txt 
IF EXIST "%output%" DEL "%output%" 
FOR /L %%G IN (1, 1, 69) DO (
    CALL :ping 192.168.%%G.3 
    CALL :ping 192.168.%%G.4 
) 
GOTO :EOF 

:ping 
ping -n 1 %1 | find "Approximate round trip" >NUL && ECHO %1>>"%output%" 

EDIT 2

都修改瞭解決方案,使用子程序調用,以避免for循環內的%ip%過早擴張。 (也可以通過啓用延遲擴展來修復)

還引用%output%無處不在。

+0

偉大的Andriy!非常感謝您的幫助。 – user597875 2011-02-21 16:25:47

-1
@echo off 
:A 
FOR /L %%G IN (1, 1, 69) DO (
    ping -n 1 192.168.%%G.3 
    ping -n 1 192.168.%%G.4 
) 
:GoTo 
+0

它適合你嗎? – 2013-06-16 15:18:12

相關問題