批量检查主机名是不是有效
Posted
技术标签:
【中文标题】批量检查主机名是不是有效【英文标题】:Check if a hostname is valid or not in batch批量检查主机名是否有效 【发布时间】:2022-01-09 15:06:13 【问题描述】:我想用一个简单的批处理脚本检查计算机是否可以 ping。 在某些情况下,我输入错误并且主机名不正确,但反馈是“成功”。
@echo off
REM stor.bat:
ping -n 1 %1 | find "TTL=" >nul
if errorlevel 1 (
echo Reachable
explorer.exe \\%1\c$\
) else (
echo Not reachable
)
【问题讨论】:
【参考方案1】:你的命令是基于 find "TTL=" 的,它适用于 ip4 号码,所以这应该可以工作
@echo off
REM stor.bat:
ping -n 1 %1 | find "TTL="
if %errorlevel%==0 (echo Reachable & explorer.exe \\%1\c$\) else (echo Not reachable & pause)
所以
stor 127.0.0.1
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reachable
但 ping 并不理想,名称请参阅此响应,其中未显示成功
stor advent
Not reachable
但是ping -n 1 advent
没有返回“TTL”的提示
Pinging ADVENT [fe80::6467:ace9:6aef:cb1a%10] with 32 bytes of data:
Reply from fe80::6467:ace9:6aef:cb1a%10: time=1ms
Ping statistics for fe80::6467:ace9:6aef:cb1a%10:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
一种方法是“查找”响应,例如“往返”
@echo off
REM stor.bat:
ping -n 1 %1 | find "round trip"
if %errorlevel%==0 (echo Reachable & explorer.exe \\%1\c$\) else (echo Not reachable & pause)
[Edit] 正如@Stephen 提醒的那样,我们可以使用您的第一种方法,通过添加 -4 来强制 TTL=
@echo off
REM stor.bat:
ping -4 -n 1 %1 | find "TTL="
if %errorlevel%==0 (echo Reachable & explorer.exe \\%1\c$\) else (echo Not reachable & pause)
【讨论】:
强制ping
使用IP4:ping -4
或ping ... | findstr /c:"(0%%"
与IP4 或IP6 一起使用(只有一个%
直接在命令行上)【参考方案2】:
这个batch-file
将ping 主机以确定它是否可用。这使用 PowerShell 核心。如果您只使用 Windows PowerShell,请将 pwsh.exe
更改为 powershell.exe
。
请记住,某些主机可能禁用了 ICMP (ping)。
此外,如果您输入错误的联机主机名(host02 而不是 host01),它也会返回成功。
SET "THEHOST=%1"
FOR /F "delims=" %%A IN ('pwsh.exe -NoLogo -NoProfile -Command ^
"if (Test-Connection -TargetName %THEHOST% -Count 1 -Quiet) 1 else 0 "') DO (
SET /A "ISCONNECTED=%%A"
)
IF %ISCONNECTED% EQU 1 (
ECHO The %THEHOST% is connected
) ELSE (
ECHO The %THEHOST% is NOT connected
)
【讨论】:
以上是关于批量检查主机名是不是有效的主要内容,如果未能解决你的问题,请参考以下文章