我有两个批处理文件来ping文本文件servers.txt
中的所有IP。
其中一个批处理文件ping服务器并在CMD窗口中显示结果。
另一个批处理文件ping服务器并在CMD窗口中不显示任何内容,在完成对服务器的所有ping操作后,它会将它们放在OnlineServers.txt
文件中。
我想混合这个东西。
我希望批处理文件运行ping并在屏幕上显示它们并将所有在线服务器放在OnlineServers.txt
中。
这是第一个批处理文件,显示CMD窗口上的ping而没有任何输出到文本文件:
@echo off
for /f "delims=" %%a in (servers.txt) do ping -n 1 %%a >nul && (echo %%a Online) || (echo %%a Offline)
echo.
pause
这是第二个批处理文件,它在CMD窗口中没有显示任何内容,只有在ping所有服务器后才输出该文件:
@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
这些是要检查的150多台服务器,我每天都会将服务器添加到此列表中,因此需要检查一长串列表。
答案 0 :(得分:1)
您可以简单地实现对con
设备(控制台)的显式重定向
顺便说一下,如果使用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
)
)
)
答案 1 :(得分:0)
批量写入文件将不得不中断括号 重定向并在开始时重置文件。
RouteConfig.RegisterRoutes(RouteTable.Routes);
答案 2 :(得分:0)
如果您想为批处理文件添加一些颜色:
@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
::*************************************************************************************
所以你可以得到像这样的输出: