如何使程序仅在使用批处理或 powershell 有 Internet 连接时运行? [关闭]

Posted

技术标签:

【中文标题】如何使程序仅在使用批处理或 powershell 有 Internet 连接时运行? [关闭]【英文标题】:How to make a program run only when there is Internet connection using batch or powershell? [closed] 【发布时间】:2021-02-15 02:47:03 【问题描述】:

这个问题可能听起来很愚蠢,但我已经尝试了好几个小时了。

问题是,我想要一个批处理文件每 30 秒检查一次互联网连接,如果没有连接,我希望它再次检查一次。

如果连接可用,我希望它启动一个程序,比如 Notepad.exe。

我也可以使用 powershell,但我对此有点陌生,但如果它能够完成这项工作,我会很高兴。

【问题讨论】:

欢迎来到 ***。请在问题中包含您尝试过的代码,并告诉我们您遇到了什么问题。 您可以尝试使用“ping”。这应该适用于批处理文件以及 powershell。这是类似内容的链接:***.com/a/49656667/5594257 这是一个名为Check_Internet_Connection.hta的HTA 【参考方案1】:

使用基本 ping,但考虑到 ping 用于诊断并且没有优先级。

@echo off
:try
(ping 8.8.8.8 && start notepad)>nul 2>&1 || echo No connection
(timeout 30 /NOBREAK)>nul
goto :try

或使用 curl:

@echo off
:try
(curl google.com && start notepad)>nul 2>&1 || echo No connection
(timeout 30 /NOBREAK)>nul
goto :try

【讨论】:

干得好,很高兴看到它的批处理/cmd 版本。提醒我为什么我喜欢 Powershell。【参考方案2】:

通常的选择是自己决定一个活跃的互联网连接的外观和行为,并进行相应的检查。一种方法是使用pingTest-Connection,但是这不会告诉您DNS 或ICMP 以外的其他内容何时损坏。您还可以在某处下载一个小资源,如果成功,则显然存在互联网连接。这可以通过curlwgetInvoke-WebRequest 完成。

在批处理文件中,您很可能会检查命令的退出代码(通过if errorlevel%errorlevel%),或者只是将命令与||&& 链接在一起。

在 PowerShell 中,使用相应的 cmdlet 通常可以更轻松地推断失败或成功。

【讨论】:

【参考方案3】:

您可以使用Test-Connection 来检查您是否可以访问某个网站。这基本上是 ping 的 powershell 等价物。

while (-not (Test-Connection google.com -Count 1 -Quiet)) 
    Start-Sleep -Seconds 30

Start-Process notepad.exe

【讨论】:

注意:你也可以在你的条件下使用(ping -t google.fr -n 1).Count -eq "1" @Xiaojiba 没错。但是,当我有幸使用 powershell 而不是批处理时,使用 cmdlet 会方便得多。

以上是关于如何使程序仅在使用批处理或 powershell 有 Internet 连接时运行? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

仅在 ISE 中运行的 Powershell 脚本

仅在非交互式运行时如何从 Powershell 脚本返回退出代码

使用带有 Web 平台安装程序 API 的 Powershell 仅在 64 位机器上获取 x86 安装程序

C# PowerShell 无法仅在 Web 应用程序中连接到 AzureAD

如何使用批处理或 powershell 更改 Windows PC 的主机名

如何仅在 VS 2012 中的 Web 部署发布任务之前执行 PowerShell 脚本?