我目前正在支持一組正在升級辦公室機器的技術人員,我需要跟蹤在線機器的數量。批處理文件'繼續'到FOR循環中的下一次迭代
目前我所擁有的是帶有機器名稱列表和批處理文件(OfficeName.bat)的文本文件(OfficeName.txt)。
我想要發生的事情是讓它遍歷機器列表並ping通它們。
如果ping成功,則從列表中刪除名稱並將計數器加1,如果不成功,則轉到列表中的下一臺計算機。
我遇到的問題是,如果一臺機器的ping結果返回「無法找到主機」,它仍然將errorlevel設置爲0,所以我不能使用IF/ELSE。
我現在的嘗試是這樣的:
@echo off
setlocal EnableDelayedExpansion
set /a counter=0
set "NVC="
for /F %%a in (%~n0.txt) do set "NVC=!NVC! %%a"
:ping
for %%i in (%NVC%) do (
ping %%i -n 1 >nul | find "TTL=" >nul || echo. %%i is offline.
set /a counter+=1
echo %%i is online
set "NVC=!NVC: %%i=!"
)
cls
echo. %counter% machines are online.
if defined NVC goto :ping
echo All machines in %~n0 are online.
pause
的問題是,一旦「%% i是離線」線完成後,它只是延續到下一行,反正刪除。
如果ping結果不好,有沒有辦法跳過ping下面的3行,然後繼續列表中的下一次迭代?
注意:我從Server 2008運行此程序,ping Win 8.1計算機。
其實你可以用'if!errorlevel! GEQ 1'由'如果ErrorLevel 1'等同,所以不再需要延遲擴展... – aschipfl