我正试图编写一个批处理文件,通过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的帮助下,我创建了以下代码,它正是我所需要的。。。。
- ping默认网关,并将结果输出到文本文件
- 显示一条消息,告诉用户不要关闭命令窗口
@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