所以,我必须使用批处理只为这一点。 基本上,的服务器主机名都列在一个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?