我想作一個.bat文件,會做一個for循環象下面這樣:批處理文件 - 環平 - 輸出到文件均達到主機
@echo off
FOR /L %%G IN (1, 1, 69) DO (
ping -n 1 192.168.%%G.3
ping -n 1 192.168.%%G.4
)
然後通過輸出看,只有送成功回覆ping到txt文件的IP。這可能與CMD批處理文件?
我想作一個.bat文件,會做一個for循環象下面這樣:批處理文件 - 環平 - 輸出到文件均達到主機
@echo off
FOR /L %%G IN (1, 1, 69) DO (
ping -n 1 192.168.%%G.3
ping -n 1 192.168.%%G.4
)
然後通過輸出看,只有送成功回覆ping到txt文件的IP。這可能與CMD批處理文件?
@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%
無處不在。
@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
它適合你嗎? – 2013-06-16 15:18:12
偉大的Andriy!非常感謝您的幫助。 – user597875 2011-02-21 16:25:47