2016-12-24 626 views
1

我有两个批处理文件ping文本文件中的所有IP servers.txt。 其中一个批处理文件ping服务器并在CMD窗口中显示结果。 另一个批处理文件ping服务器,并且在CMD窗口上什么也没有显示,并且在它完成对服务器的所有ping之后,它将把它们放在OnlineServers.txt文件中。批处理文件运行ping命令并输出到文本以及

我想混合这个东西。

我希望批处理文件运行ping并在屏幕上显示它们,并将所有在线服务器放在OnlineServers.txt中。

这是第一个批处理文件,显示在CMD窗口坪没有任何输出到文本文件:

@echo off 
    for /f "delims=" %%a in (servers.txt) do ping -n 1 %%a >nul && (echo %%a  Online) || (echo %%a  Offline) 

echo. 
pause 

这里是第二批文件,该文件显示在CMD窗口,只将它输出坪后的文件什么所有服务器:

@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

写入该文件的批处理将必须使用重定向中断附带括号的圆括号 并在开始时重置文件。

@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 
    ) 
) 
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 
     ) 
    ) 
) 
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

相关问题