用于运行ping命令和输出到文本的批处理文件以及

时间:2016-12-24 02:22:25

标签: windows batch-file cmd

我有两个批处理文件来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多台服务器,我每天都会将服务器添加到此列表中,因此需要检查一长串列表。

3 个答案:

答案 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
::*************************************************************************************

所以你可以得到像这样的输出:

enter image description here