如何使程序仅在使用批处理或 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】:通常的选择是自己决定一个活跃的互联网连接的外观和行为,并进行相应的检查。一种方法是使用ping
或Test-Connection
,但是这不会告诉您DNS 或ICMP 以外的其他内容何时损坏。您还可以在某处下载一个小资源,如果成功,则显然存在互联网连接。这可以通过curl
、wget
或Invoke-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 连接时运行? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
仅在非交互式运行时如何从 Powershell 脚本返回退出代码
使用带有 Web 平台安装程序 API 的 Powershell 仅在 64 位机器上获取 x86 安装程序
C# PowerShell 无法仅在 Web 应用程序中连接到 AzureAD