Home > Back-end >  Check if a hostname is valid or not in batch
Check if a hostname is valid or not in batch

Time:12-04

i want to check with a simple batch script, if a Computer is pingable or not. In some case, i misstype and the hostname is incorrect, but as a feedback comes "Successful".

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

CodePudding user response:

your command is based on find "TTL=" which works for ip4 numbers so this should work

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

so

stor 127.0.0.1
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reachable

but ping is not ideal with names see this response where success is not shown

stor advent
Not reachable

however ping -n 1 advent returns no hint of "TTL"

Pinging ADVENT [fe80::6467:ace9:6aef:cb1a] with 32 bytes of data:
Reply from fe80::6467:ace9:6aef:cb1a: time=1ms

Ping statistics for fe80::6467:ace9:6aef:cb1a:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 1ms, Maximum = 1ms, Average = 1ms

one method is "Find" something in response like "round trip"

@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] as reminded by @Stephen we can use your first method by adding -4 to force The 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)

CodePudding user response:

This batch-file will ping the host to identify if it is available. This uses PowerShell Core. If you are only using Windows PowerShell, change pwsh.exe to powershell.exe.

Remember that some hosts may have ICMP (ping) disabled.

Also, if you mistype a hostname that is online (host02 instead of host01), it will also return as successful.

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
)
  • Related