使用批处理检查互联网连接

2024-02-20

因此,最近我的互联网连接确实不太令人满意,因此我正在尝试收集尽可能多的数据,以了解中断的时间和持续时间。我尝试了一些“连接监控”程序,但它们没有按照我想要的方式工作,所以我决定制作一个。

我是一个十足的菜鸟,但通过过去一个小时的谷歌搜索,我想出了这个:

SET status="

:start_test
timeout 5
ping -n 2 -w 700 www.google.com | find "bytes="
IF %ERRORLEVEL% EQU 0 (
    SET internet=Connected to the internet.

) ELSE (
    SET internet=Not connected to the internet.
)
IF %status%==%internet%(
goto :start_test
) ELSE (
goto :teller 
)

:teller
echo ------------------------------------------
echo %internet%
@echo %time%
echo ------------------------------------------
SET status=%internet%
goto :start_test

tl;dr-它通过固定 google.com 来检查互联网连接,并在每次互联网连接状态发生变化时编写一条消息

但问题是它不起作用我不知道为什么,当我尝试运行它时,控制台会打开,浏览前几行并自行关闭。

Help

编辑: 现在它可以工作了,这就是文件现在的样子(就像莫迪所说的那样):

@echo off
SET "status="

:start_test
timeout 5
ping -n 2 -w 700 www.google.com | find "bytes="
IF %ERRORLEVEL% EQU 0 (
    SET internet=Connected to the internet.

) ELSE (
    SET internet=Not connected to the internet.
)
IF "%status%"=="%internet%" (
goto :start_test
) ELSE (
goto :teller 
)

:teller
echo ------------------------------------------
echo %internet%
@echo %time%
echo ------------------------------------------
SET "status=%internet%"
goto :start_test

答案关于批处理文件比较变量与常量失败 https://stackoverflow.com/a/42448601/3074564在第一章中解释了如何调试批处理文件not双击它,但通过打开命令提示符窗口并从此窗口中运行批处理文件来查看由语法错误引起的错误消息,从而导致退出批处理文件执行。


SET status="

这一行定义了环境变量status与价值".

我想你想使用:

SET "status="

此行删除可能存在的环境变量status,但是您通过省略第一个双引号来编码错误。


命令PING sets 错误级别 to 0关于成功和1出现诸如无法 ping 通目标之类的错误。

但由于某种未知的原因,您不想评估退出代码PING并解析输出PING by FIND并评估退出代码FIND.

的用法FIND在我看来,这里完全没有必要。


退出代码的评估FIND根据此退出代码已经足以继续,但是根据以下值将两个带空格的不同字符串分配给环境变量错误级别.


多一个IF用于或多或少取决于退出代码的分支PING.

这是由于语法错误导致退出批处理执行的错误。

IF %status%==%internet%(

在第一次比较的基础上扩展为

IF " == Connected to the internet. (

or to

IF " == Not connected to the internet. (

Windows 命令解释器无法正确处理这两行,由输出到控制台的语法错误消息指示,当从命令提示符窗口中执行批处理文件时可以读取该消息。

比较包含命令分隔符 SPACE 的字符串需要将两个字符串括在双引号中进行比较,即使用:

IF "%status%" == "%internet%" (

但由于环境变量的原因,即使这样也无济于事status用单双引号定义,这会导致第一次比较时左字符串最终出现"""这再次导致语法错误。

Note:双引号字符包含在字符串比较中。


下面的块也很有趣:

IF %status%==%internet%(
goto :start_test
) ELSE (
goto :teller 
)

:teller

The ELSE分支用于跳转到在任何情况下都会执行的行ELSE分支根本不存在。所以完整的ELSE分支是完全没有必要的。


出于上述所有原因,我建议将批处理代码简化为:

@echo off
set "Status=2"
:ConnectionTest
%SystemRoot%\System32\ping.exe -n 2 -w 700 www.google.com >nul
if errorlevel 1 (
    if not "%Status%" == "1" echo %TIME%  Not connected to the internet.
    set "Status=1"
) else (
    if not "%Status%" == "0" echo %TIME%  Connected to the internet.
    set "Status=0"
)
%SystemRoot%\System32\timeout.exe /T 5 >nul
goto ConnectionTest

这里可以省略所有双引号并使用:

@echo off
set Status=2
:ConnectionTest
%SystemRoot%\System32\ping.exe -n 2 -w 700 www.google.com >nul
if errorlevel 1 (
    if not %Status% == 1 echo %TIME%  Not connected to the internet.
    set Status=1
) else (
    if not %Status% == 0 echo %TIME%  Connected to the internet.
    set Status=0
)
%SystemRoot%\System32\timeout.exe /T 5 >nul
goto ConnectionTest

为了了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • goto /?
  • if /?
  • ping /?
  • set /?
  • timeout /?

另请阅读 Microsoft 的文章:使用命令重定向运算符 https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490982(v=technet.10).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用批处理检查互联网连接 的相关文章

  • 如何声明 RSpec 中示例之间共享的变量?

    假设我有以下规格 describe Thing do it can read data do data get data from file 42 36 expect data count to eq 2 end it can proces
  • 在 shell 中用字符串替换变量

    我将一个字符串作为参数传递给 shell 脚本 shell 脚本应该告诉我传递的参数是否是变量 像这样的东西 if z 1 then echo yes 1 is a variable and its value is 1 fi 但这给了我严
  • 从android执行.bat文件

    我正在尝试执行 xxx bat 文件以从我的 Android 应用程序重命名该文件 听到的是我的代码 Runtime getRuntime exec Environment getExternalStorageDirectory File
  • 如何使用批处理全屏打开窗口

    我之前用代码制作了一个批处理文件 start chrome exe profile directory Profile 1 http drive google com 它会以配置文件 1 用户的身份打开 google chrome 页面 D
  • 如何在后台保持 iphone ios xmpp 连接处于活动状态?

    iPhone 的 XMPPFramework 功能强大 我已经启动并运行了它 但是如何在后台保持连接 10 分钟以上 我希望获得更多有关如何实现此目标的文档 操作方法 因此 用例非常简单且常见 Joe 在线并且正在使用 iPhone 聊天应
  • PHP 如何在没有 system() 或 exec() 的情况下 ping 服务器

    我正在尝试 ping 服务器 但我的主机被禁用exec and system 由于安全原因 是否还有其他选项可以让它工作 或者我是否必须要求我的主机启用它们 我得到的错误 警告 出于安全原因 system 已被禁用警告 出于安全原因 exe
  • 在文件夹的上下文菜单中运行批处理文件

    当我右键单击任何文件夹时 我想运行此批处理文件 setenv cmd echo off SET CPLUS INCLUDE PATH C mingw32 include C mingw32 lib gcc mingw32 4 9 2 inc
  • var->myProperty 和 var.myProperty 之间的区别

    我是 Objective C 的新手 我有一些疑问 我发现您可以访问类的属性 例如var gt 我的属性也喜欢那样变量 myProperty 但我不知道2之间有什么区别 我在互联网上搜索了很多 但确实没有找到确凿的答案 抱歉 如果我有拼写错
  • 如何在 MySQL 中声明变量以进行普通查询?

    如何为 MySQL 中的普通查询声明变量 e g declare myVar date set myVar something select from someTable where someColumn myVar 我尝试过 语法似乎是错
  • 批处理文件随机删除文本文件的一半行?

    我需要一种方法来使用批处理来查看文本文件的每一行 并删除该文本文件中的一半行 随机选择要删除的行 这是为了模拟 D D 游戏中的锦标赛 我所需要的只是一种方法来淘汰每轮比赛的获胜者 我可以轻松地制作一个批处理文件 复制文本文件并为每一轮重命
  • 如何理解批处理文件?

    我之前没有使用批处理文件或 shell 脚本的经验 我需要了解相关项目中使用的批处理文件所执行的操作 有没有资源提供批处理文件命令的详尽列表以及每个命令的作用 一旦您熟悉了一般的 BAT 文件信息 使用其他用户在其他答案中发布的一些有用信息
  • SSIS Forloop:根据迭代次数为变量名称赋值

    我正在尝试使用 For 循环容器为最多 10 个不同的变量赋值 变量1 变量2 变量10 基于迭代次数 我需要循环根据一个变量迭代一定次数 该变量已根据查询的结果集分配了一个整数值 该部分工作得很好 我不知道如何告诉 for 循环使用哪个变
  • 通过从 .BAT 中查找进程正在使用的端口来终止进程

    在 Windows 中 什么可以查找端口 8080 并尝试通过 BAT 文件终止它正在使用的进程 打开命令提示符并运行以下命令 C Users username gt netstat o n a findstr 0 0 3000 TCP 0
  • Python - 将长/整数值与 == 进行比较并且是[重复]

    这个问题在这里已经有答案了 可能的重复 Python is 运算符对整数的行为异常 https stackoverflow com questions 306313 python is operator behaves unexpected
  • 更改通过表单上传的 tmp 文件的文件名

    就像标题说我想更改用户通过表单上传的文件的文件名 这是代码 HTML
  • 您应该通过属性访问同一类中的变量吗?

    如果您有一个获取和设置实例变量的属性 那么通常您总是使用该类外部的属性来访问它 我的问题是你也应该在课堂上这样做吗 如果有的话 我总是使用该属性 即使是在班级内 但我想听到一些支持和反对的论据 以确定哪个是最正确的以及为什么 或者这只是项目
  • 从 IPConfig 获取 IP 地址,稍后在代码中使用,或保存 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 是否可以运
  • 如何使用 C 将带有 2 个变量的 IF 语句转换为 switch 函数?

    我有一个 IF 语句 我想将其转换为 Switch 语句 但它有 2 个变量 在C上可以实现吗 这是一个石头 剪刀 布的游戏 R代表石头 P代表布 S代表剪刀 char play1 play2 printf nPlayer 1 Enter
  • 批处理文件中的 Powershell - 如何转义元字符?

    运行 Windows 7 当我复制文件在例程期间到外部磁盘文件备份 我使用 Powershell v2 从批处理文件 在副本文件上重新创建原始文件的所有时间戳 以下代码在大多数情况下都能成功运行 但并非总是如此 SET file 1 SET
  • 在 Postgres 9.0+ 中使用 PL/pgSQL 循环表

    我想循环遍历所有表以计算每个表中的行数 以下查询给我一个错误 DO DECLARE tables CURSOR FOR SELECT tablename FROM pg tables WHERE tablename NOT LIKE pg

随机推荐

  • SELECT * 中有时会缺少计算列

    在 SQL Azure 中 我有一个或多或少像这样设置的表 其中有两个计算列 IsExpired and IsDeadlineExpired 简单地将不可为 null 的日期时间列与当前时间进行比较 CREATE TABLE dbo Stu
  • 带有预定义关键字参数的define_method

    我想定义一个采用关键字参数的方法 我希望它在未提供关键字参数时引发 并且我可以自己编写代码 但理想情况下我想让 Ruby 为我做这件事 另外我希望能够使用检查新定义的方法Method parameters 如果我使用速记 double sp
  • 覆盖rails update_all方法

    我需要覆盖轨道 活动记录 update all方法 以便它始终更新updated at场也是如此 我应该如何实现这一目标 将以下代码放入文件中 config initializers update all with touch rb cla
  • 将用户定义的库添加到 SVN

    我正在开发一个项目 我使用了许多外部库 jar 格式 我已将下载的所有外部 jar 添加到版本控制 subversion 的构建路径中 然而 最近我注意到许多库并不在 SVN 树中 我对此进行了一些研究 这些是我作为用户定义的库创建的库 并
  • 在函数中使用全局变量

    如何在函数内创建或使用全局变量 如何在一个函数中在其他函数中使用定义的全局变量 Failing to use the global keyword where appropriate often causes UnboundLocalErr
  • PostgreSQL 自定义异常?

    在 Firebird 中我们可以像这样声明自定义异常 CREATE EXCEPTION EXP CUSTOM 0 异常 自定义异常 这些存储在数据库级别 在存储过程中 我们可以像这样引发异常 异常 EXP CUSTOM 0 PostgreS
  • Cakephp - HABTM 记录不会在唯一设置为 true 时删除

    CakePHP 的默认值 unique 设置为 true 我对其进行编码也是为了确保这一点 所以我有以下数据库结构 项目 HABTM 操作 将 unique 设置为 true 情况如下 当我删除 1 条或多条记录时 如果至少 1 条记录保持
  • 有没有办法从 Java Play 2 框架中的数据库生成代码?

    有谁知道如何在 Play Framework 2 0 中轻松地从数据库生成代码 我知道他们有一个模块 但似乎这是 1 X 版本的 Anyone CRUD 模块仅适用于 Play 1 2 x 在 Play 2 0 中不可用 它可能会在 Pla
  • C++ 中的 exit 和 std::exit 有什么区别?

    有什么区别exit and std exit在 C 中 我已经研究过但我找不到任何东西 这两个代码有什么区别 1 if SDL Init SDL INIT EVERYTHING 0 std cout lt lt Error Can t in
  • 实例变量何时初始化并赋值?

    实例变量什么时候初始化 是在构造函数块完成之后还是之前 考虑这个例子 public abstract class Parent public Parent System out println Parent Constructor init
  • 如何在cmd中显示每个进程的CPU使用率

    我想要一个 cmd windows 命令来显示所有进程以及每个进程的 cpu 百分比 有一个命令可以给我这个结果吗 你能帮我吗 谢谢 Try pslist http technet microsoft com en us sysintern
  • 访问回收站

    我想检查回收站中的文件 就像它是一个普通目录一样 特别是获取那里的文件列表以及每个文件到达回收站的日期 这段代码可以帮助你 Access the recycle bin folder Dim SH As New Shell32 Shell
  • Python 3.6 中的 f 字符串调试简写

    下列适用于 Python 3 8 https stackoverflow com questions 59661904 what does equal do in f strings inside the expression curly
  • 尝试删除最后一个元素时,带有子项的 SwiftUI (2.0) 列表崩溃

    我有以下带有子项的 SwiftUI 列表的代码 改编自另一个 StackOverflow 答案 SwiftUI 2 0 带有子项的列表 如何使披露按钮的可点击区域覆盖整个列表项 https stackoverflow com questio
  • 校准图像以获得位于同一平面上的点的顶视图

    校准 我已经使用 Matlab 中的视觉工具箱校准了相机 我使用棋盘图像来做到这一点 校准后我得到了cameraParams 其中包含 Camera Extrinsics RotationMatrices 3x3x18 double Tra
  • Angular 5 材质小吃栏仅针对自定义错误处理无法正确显示,否则工作正常

    Angular 5 材质 材质小吃栏仅针对自定义错误处理无法正确显示 否则工作正常 我试图使用材料小吃栏显示我的后端错误 问题是第一次被触发时 它出现在错误的位置 不是应有的底部中间 而是在左侧 并且它永远留在那里而不会消失 根据我的配置
  • 单击时弹出窗口中出现错误微调器

    我的应用程序如果有一个按钮 一个弹出窗口 有两个旋转器 那么我就可以在那里弹出窗口 但是当我单击旋转器时出现错误 这里有我的下面的代码和调试 因为 logcat 我一切都正确 public void a adirRegistro View
  • 根据另外 2 个表的联接结果插入到一个表中

    我在 MySQL 中有 3 个表 def table spot table tag mapping spot table def table tag id tag ja 2010490043 鉄道 2010680003 american f
  • 从动态名称获取 PHP 枚举

    我正在尝试从动态名称创建 php 8 1 枚举 看来不可能 所以给定一个枚举 enum Foo case bar 当然还有以下作品 Foo bar虽然这不会 name bar Foo name 这会导致 访问未声明的静态属性 App Con
  • 使用批处理检查互联网连接

    因此 最近我的互联网连接确实不太令人满意 因此我正在尝试收集尽可能多的数据 以了解中断的时间和持续时间 我尝试了一些 连接监控 程序 但它们没有按照我想要的方式工作 所以我决定制作一个 我是一个十足的菜鸟 但通过过去一个小时的谷歌搜索 我想