多台服务器批处理文件,如何来ping多台服务器和返回的IP地址和主机名使用批处理脚本?(How to ping multi...

所以,我必须使用批处理只为这一点。 基本上,的服务器主机名都列在一个txt文件。 我用下面的代码来ping所有的服务器,并在txtfile显示其结果。

For /f %%i in (testservers.txt) do ping -n 1 %%i >>pingtest.txt

以上ping的所有服务器。 现在,我要输出的IP地址,并在一个单独的文件中的主机名。 我怎样才能做到这一点? 我知道我可以循环搜索诸如“TTL”字样运行,然后寻找第三个符号(对于IP)和像“查验”第二令牌(主机名)。 但我有错误,不能正确显示。 为什么我要输出IP地址和主机名在不同的文件中的原因是使向下和向上的服务器列表。

帮助将不胜感激。 :)

编辑:只是所以它不是混乱,是想让你们知道有3个不同的文件,testservers.txt有主机名在里面,pingtest.txt有Ping测试结果,并会的Result.txt有IP地址以及主机名与它们的当前状态为向下或向上。

Answer 1:

嗯,这是不幸的是,你没有张贴自己的代码了,所以,它可以被纠正。

无论如何,这是我自己的解决方案,这一点:

@echo off

setlocal enabledelayedexpansion

set OUTPUT_FILE=result.txt

>nul copy nul %OUTPUT_FILE%

for /f %%i in (testservers.txt) do (

set SERVER_ADDRESS=ADDRESS N/A

for /f "tokens=1,2,3" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (

if %%x==Pinging set SERVER_ADDRESS=%%y

if %%x==Reply set SERVER_ADDRESS=%%z

if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)

)

echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE! >>%OUTPUT_FILE%

)

通过在主机和内环的外循环迭代解析ping输出。 前两个if语句处理IP地址解析的两种可能的情况:

主机名是主机的IP地址。

主机的IP地址可以从它的名字来解决。

如果主机IP地址无法解析,地址设置为“地址N / A”。

希望这可以帮助。

Answer 2:

为每个主机名解析pingtest.txt,并与一批结果是困难的,因为名字和结果都在不同的线路。

这是很容易测试每个PING命令的结果(返回的错误码),而不是直接重定向到一个文件。 这也是更有效的括在括号的整个结构和重定向最终输出只有一次。

>result.txt (

for /f %%i in (testservers.txt) do ping -n 1 %%i >nul && echo %%i UP||echo %%i DOWN

)

Answer 3:

用ping的问题是,如果主机是不是活经常在本地机器会返回一个回答被ping主机不可用,从而平的错误代码是零,你的代码将错误运行,因为无法识别关闭状态。

更好地做这种方式

ping -n 4 %1 | findstr TTL

if %errorlevel%==0 (goto :eof) else (goto :error)

这样一来,你找一个典型的字符串TTL它总是在出色地完成平结果,并检查该FINDSTR而非刺激性平错误

总体而言,这看起来是这样的:

@echo off

SetLocal

set log=path/to/logfile.txt

set check=path/to/checkfile.txt

:start

echo. some echo date >>%log%

:check

for /f %%r in (%check%) do (call :ping %%r)

goto :eof

:ping

ping -n 4 %1 | findstr TTL

if %errorlevel%==0 (goto :eof) else (goto :error)

:error

echo. some errormessage to >>%log%

echo. some blat to mail?

:eof

echo. some good message to >>%log%

Answer 4:

试试这个

$servers = Get-Content test.txt

$reg=""

foreach ($server in $servers)

{

$reg=$reg+$server+"`t"+([System.Net.Dns]::GetHostAddresses($server) | foreach {echo $_.IPAddressToString})+"`n"

}

$reg >reg.csv

Answer 5:

我的工作由埃坦-T前面给出和改造,以输出到CSV文件中的代码。 发现在前面的代码,结果并不总是给正确的价值观以及因此我改进它。

testservers.txt

SOMESERVER

DUDSERVER

results.csv

HOSTNAME LONGNAME IPADDRESS STATE

SOMESERVER SOMESERVER.DOMAIN.SUF 10.1.1.1 UP

DUDSERVER UNRESOLVED UNRESOLVED DOWN

pingtest.bat

@echo off

setlocal enabledelayedexpansion

set OUTPUT_FILE=result.csv

>nul copy nul %OUTPUT_FILE%

echo HOSTNAME,LONGNAME,IPADDRESS,STATE >%OUTPUT_FILE%

for /f %%i in (testservers.txt) do (

set SERVER_ADDRESS_I=UNRESOLVED

set SERVER_ADDRESS_L=UNRESOLVED

for /f "tokens=1,2,3" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (

if %%x==Pinging set SERVER_ADDRESS_L=%%y

if %%x==Pinging set SERVER_ADDRESS_I=%%z

if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)

)

echo %%i [!SERVER_ADDRESS_L::=!] !SERVER_ADDRESS_I::=! is !SERVER_STATE!

echo %%i,!SERVER_ADDRESS_L::=!,!SERVER_ADDRESS_I::=!,!SERVER_STATE! >>%OUTPUT_FILE%

)

Answer 6:

@回响

例如 - C:\工作}设定IPLIST =%WORKDIR%\ IP-LIST.TXT

setlocal enabledelayedexpansion

set OUTPUT_FILE=%workdir%\result.csv

>nul copy nul %OUTPUT_FILE%

echo HOSTNAME,LONGNAME,IPADDRESS,STATE >%OUTPUT_FILE%

for /f %%i in (%iplist%) do (

set SERVER_ADDRESS_I=UNRESOLVED

set SERVER_ADDRESS_L=UNRESOLVED

for /f "tokens=1,2,3" %%x in ('ping -a -n 1 %%i ^&^& echo SERVER_IS_UP') do (

if %%x==Pinging set SERVER_ADDRESS_L=%%y

if %%x==Pinging set SERVER_ADDRESS_I=%%z

if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)

)

echo %%i [!SERVER_ADDRESS_L::=!] !SERVER_ADDRESS_I::=! is !SERVER_STATE!

echo %%i,!SERVER_ADDRESS_L::=!,!SERVER_ADDRESS_I::=!,!SERVER_STATE! >>%OUTPUT_FILE%

)

Answer 7:

这个工作很好,我只是添加-a选项来ping解析主机名。 由于https://stackoverflow.com/users/4447323/wombat

@回响SETLOCAL enabledelayedexpansion组OUTPUT_FILE = result.csv

>nul copy nul %OUTPUT_FILE%

echo HOSTNAME,LONGNAME,IPADDRESS,STATE >%OUTPUT_FILE%

for /f %%i in (testservers.txt) do (

set SERVER_ADDRESS_I=UNRESOLVED

set SERVER_ADDRESS_L=UNRESOLVED

for /f "tokens=1,2,3" %%x in ('ping -n 1 -a %%i ^&^& echo SERVER_IS_UP') do (

if %%x==Pinging set SERVER_ADDRESS_L=%%y

if %%x==Pinging set SERVER_ADDRESS_I=%%z

if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)

)

echo %%i [!SERVER_ADDRESS_L::=!] !SERVER_ADDRESS_I::=! is !SERVER_STATE!

echo %%i,!SERVER_ADDRESS_L::=!,!SERVER_ADDRESS_I::=!,!SERVER_STATE! >>%OUTPUT_FILE%

)

Answer 8:

这适用于西班牙的运作体系。

脚本接受两个参数:

用IP或域名的列表中的文件

输出文件

script.bat listofurls.txt output.txt的

@echo off

setlocal enabledelayedexpansion

set OUTPUT_FILE=%2

>nul copy nul %OUTPUT_FILE%

for /f %%i in (%1) do (

set SERVER_ADDRESS=No se pudo resolver el host

for /f "tokens=1,2,3,4,5" %%v in ('ping -a -n 1 %%i ^&^& echo SERVER_IS_UP')

do (

if %%v==Haciendo set SERVER_ADDRESS=%%z

if %%v==Respuesta set SERVER_ADDRESS=%%x

if %%v==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)

)

echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE! >>%OUTPUT_FILE%

echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE!

)

文章来源: How to ping multiple servers and return IP address and Hostnames using batch script?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值