如何在不指定IP地址的情况下ping默认网关



我正试图编写一个批处理文件,通过ping给定网络的默认网关来测试网络连接。然而,由于我希望这是一个自动化的过程,然后将结果记录到一个文本文件中,我希望能够在各种网络上ping网关,而无需更改/输入ip地址。

是否有一个通用术语或命令来ping您当前连接到的网络的默认网关?

(我已经有了输出选项等的命令)

到目前为止,我有这个。。。。

@echo off
goto :NETWORK1
:NETWORK1
ipconfig
echo .
Set /P gateway=PLEASE ENTER GATEWAY IP ADDRESS (shown above): 
if /I "%gateway%" EQU "exit" goto :EXIT
if /I not "%gateway%" EQU "exit" goto :NETWORK2
:NETWORK2
echo CLOSING THIS WINDOW WILL ABORT THE CONNECTIVITY TEST.
echo . >> "C:Network Test Results %date:/=.%.txt"
echo Time: >> "C:Network Test Results %date:/=.%.txt"
time /t >> "C:Network Test Results %date:/=.%.txt"
ping %gateway% -n 20 >> "C:Network Test Results %date:/=.%.txt"
goto :NETWORK2
:EXIT
exit

但我不想指定IP地址,这样我就可以省去用户输入的需要。

Wernfried Domscheit 的小型修复

for /f "tokens=2 delims=:" %%g in ('netsh interface ip show address ^| findstr /c:"Default Gateway"') do ping %%g
pause

只是在"默认网关"之前添加/c

在命令行上,您可以尝试以下操作:

for /f "tokens=2 delims=:" %g in ('netsh interface ip show address ^| findstr "Default Gateway"') do ping %g

注意,在批处理文件中,必须将%(即)加倍

for /f "tokens=2 delims=:" %%g in ('netsh interface ip show address ^| findstr "Default Gateway"') do ping %%g

根据serverfault上的jimboomcgee,他对"如何将命令行输出提取到变量中?

for /f "usebackq tokens=1,2,3 delims=:" %A in (`ipconfig ^| Find "Default Gateway" ^| Findstr/N "." ^| Findstr/B "1:"`) do @if not defined MYVAR set MYVAR=%~C
@echo off
    setlocal enableextensions disabledelayedexpansion
    set "gateway="
    for /f "tokens=1-5" %%a in ('route -4 print 0.*') do @if "%%e"=="" if "%%a"=="%%b" set "gateway=%%c"
    if not defined gateway goto :eof
    echo CLOSING THIS WINDOW WILL ABORT THE CONNECTIVITY TEST.
:loop
    echo %date% %time%
    >> "Network Test Results %date:/=.%.txt" (
        echo(
        echo(Time: %time%
        ping -n 20 -4 %gateway%
    )
    goto :loop

根据从此处复制的route信息确定网关

编辑以获得更宽容的route命令解析,请使用

for /f "tokens=3" %%a in ('route -4 print 0.* ^| find "0."') do set "gateway=%%a"

在@MC ND的帮助下,我创建了以下代码,它正是我所需要的。。。。

  1. ping默认网关,并将结果输出到文本文件
  2. 显示一条消息,告诉用户不要关闭命令窗口

@echo off

setlocal enableextensions disabledelayedexpansion

for /f "tokens=3" %%a in ('route -4 print 0.*') do set "gateway=%%a"

:NETWORK

echo CLOSING THIS WINDOW WILL ABORT THE CONNECTIVITY TEST.

echo Time >> "C:Network Test Results %date:/=.%.txt"

time /t >> "C:Network Test Results %date:/=.%.txt"

echo . >> "C:Network Test Results %date:/=.%.txt"

ping %gateway% -n 20 >> "C:Network Test Results %date:/=.%.txt"

goto :NETWORK

最新更新