現在、私はオフィス内のマシンをアップグレードする技術者のチームをサポートしており、オンラインマシンの量を把握する必要があります。FORループの次の反復までバッチファイル 'continue'
私は現在、マシン名のリストとバッチファイル(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
問題は、一度ラインはそれだけで次の行に続けて、行われている「%%私がオフラインである」ということで、とにかくそれを削除します。
pingの結果が悪い場合、pingの下の3行をスキップしてリストの次の繰り返しを続ける方法はありますか?
注:私はServer 2008からWindows 8.1マシンにpingを実行しています。
実際には、「if!errorlevel! GEQ 1'を「もしErrorLevel 1」と同等のものにすると遅延拡張の必要はありません... – aschipfl