【问题标题】: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
)

【问题讨论】:

    标签: batch-file cmd ping


    【解决方案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 -4ping ... | 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
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2013-07-19
      • 2012-12-08
      相关资源
      最近更新 更多