현재 사무실에서 기계를 업그레이드하는 기술자 팀을 지원하고 온라인 상태 인 기계의 양을 추적해야합니다.FOR 루프의 다음 반복으로 배치 파일 계속
현재 컴퓨터 이름 목록과 배치 파일 (OfficeName.bat)이 포함 된 텍스트 파일 (OfficeName.txt)이 있습니다.
내가 원하는 것은 기계 목록을 반복하여 핑 (ping)하는 것입니다.
ping이 성공적이면 목록에서 이름을 제거하고 실패 할 경우 카운터를 1 씩 증가시킨 다음 목록의 다음 컴퓨터로 이동하십시오.
내가 겪고있는 문제는 컴퓨터의 ping 결과가 "호스트를 찾을 수 없습니다"와 함께 다시 오면 오류 수준을 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가 오프라인 상태입니다"고하고 어쨌든을 제거합니다.
핑 결과가 좋지 않으면 핑 아래의 3 줄을 건너 뛰고 목록에서 다음 반복을 계속할 수 있습니까?
참고 : 저는 Windows 2008에서 Windows 8.1 컴퓨터로 ping을 실행하고 있습니다.
실제로 'if! errorlevel! GEQ 1'이 'ErrorLevel 1이면'에 해당하므로 지연된 확장이 필요하지 않습니다 ... – aschipfl