windows - parametros - tipos de ping
Archivo por lotes para ejecutar el comando ping y salida a texto tambiƩn (3)
Simplemente podría implementar una redirección explícita al dispositivo de con
(consola).
Por cierto, en realidad no necesitas demoras en la expansión si usas la sintaxis de if ErrorLevel
:
@echo off
setlocal
> "OnlineServers.txt" (
for /F "usebackq delims=" %%a in ("servers.txt") do (
ping -n 1 "%%a" > NUL
if not ErrorLevel 1 (
echo %%a Online> con
echo %%a Online
) else (
echo %%a Offline> con
)
)
)
Tengo dos archivos por lotes para hacer ping a todas las direcciones IP en un archivo de texto servers.txt
. Uno de los archivos por lotes hace ping a los servidores y muestra el resultado en la ventana de CMD. El otro archivo por lotes hace ping a los servidores y no muestra nada en las ventanas de CMD y luego de que finaliza todos los ping a los servidores, los pondrá en el archivo OnlineServers.txt
.
Quiero mezclar esto.
Quiero que el archivo por lotes ejecute los pings y los muestre en la pantalla y coloque todos los servidores en línea en OnlineServers.txt
.
Aquí está el primer archivo por lotes que muestra pings en ventanas CMD sin ningún resultado en el archivo de texto:
@echo off
for /f "delims=" %%a in (servers.txt) do ping -n 1 %%a >nul && (echo %%a Online) || (echo %%a Offline)
echo.
pause
Y aquí está el segundo archivo por lotes que no muestra nada en la ventana de CMD y solo muestra el archivo después de hacer ping a todos los servidores:
@echo off
setlocal EnableDelayedExpansion
(for /F "delims=" %%a in (servers.txt) do (
ping -n 1 "%%a" > NUL
if !errorlevel! equ 0 (
echo %%a Online
)
)) > OnlineServers.txt
Estos son más de 150 servidores para verificar y agrego servidores a esta lista todos los días, por lo que es una larga lista para verificar.
La escritura por lotes en el archivo tendrá que separar los paréntesis que los incluyen con la redirección y restablecer el archivo al inicio.
@echo off
setlocal EnableDelayedExpansion
:: Reset file
Type Nul >OnlineServers.txt
for /F "delims=" %%a in (servers.txt) do (
ping -n 1 "%%a" >NUL 2>&1
If !errorlevel! equ 0 (
echo %%a Online
echo %%a Online>>OnlineServers.txt
) Else (
echo %%a Offline
)
)
Si desea agregar algunos colores para su archivo por lotes como ese:
@echo off
Title Multi-Ping hosts Tester with colors by Hackoo 2016
call :init
set "Servers_List=servers.txt"
If Not exist %Servers_List% goto error
mode con cols=70 lines=35
set "LogFile=OnlineServers.txt"
If exist %LogFile% Del %LogFile%
echo(
call :color 0E " ------- Ping status of targets hosts -------" 1
echo(
(
echo ******************************************************
echo PingTest executed on %Date% @ Time %Time%
echo ******************************************************
echo(
) > %LogFile%
Setlocal EnableDelayedExpansion
for /f "usebackq delims=" %%a in ("%Servers_List%") do (
ping -n 1 %%a | find "TTL=" >nul
if errorlevel 1 (
call :color 0C " Host %%a is not reachable KO" 1
) else (
call :color 0A " Host %%a is reachable OK" 1 & echo Host %%a is reachable OK >>%LogFile%
)
)
EndLocal
Start "" %LogFile%
pause>nul & exit
::*************************************************************************************
:init
prompt $g
for /F "delims=." %%a in (''"prompt $H. & for %%b in (1) do rem"'') do set "BS=%%a"
exit /b
::*************************************************************************************
:color
set nL=%3
if not defined nL echo requires third argument & pause > nul & goto :eof
if %3 == 0 (
<nul set /p ".=%bs%">%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof
) else if %3 == 1 (
echo %bs%>%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof
)
exit /b
::*************************************************************************************
:error
mode con cols=70 lines=3
color 0C
cls
echo(
echo ATTENTION ! ! ! Check if the file "%Servers_List%" exists !
pause>nul & exit
::*************************************************************************************
Para que pueda obtener una salida como esta: