我想检查互联网连接,当它失败时,我想将%internet%
设置为未连接。如果它适用于connected
。
echo checking internet connection
Ping www.google.nl -n 1 -w 1000
cls
if errorlevel 1 (set internet=Not connected to internet)
if errorlevel 0 (set internet=Connected to internet)
我也试过这个:
@echo off
cls
echo Checking connection
ping -n 1 www.google.com >nul
if errorlevel 1 (
cls
set "%internet%"=="Not connected to internet"
echo %internet%
pause>nul
exit
)
cls
set "%internet%"=="Connected to internet"
echo %internet%
pause>nul
pause
--------------- EDIT ------------
这是更多的代码。
@echo off
set versienummer=v3.1
title AutoMatic Program Install Stable %versienummer% by eric
color 0a
:CheckOS
IF "%PROCESSOR_ARCHITECTURE%"=="x86" (set bit=x86) else (set bit=x64)
set "windows="
VER | find " 5.1." > nul && set windows=XP
VER | find " 5.2." > nul && set windows=XP 64-Bit or Server 2003 or Server 2003 R2
VER | find " 6.0." > nul && set windows=Vista or server 2008
VER | find " 6.1." > nul && set windows=Win7 or server 2008 R2
VER | find " 6.2." > nul && set windows=Windows 8
VER | find " 6.3." > nul && set windows=Server 2012 R2 or Windows 8.1
if defined windows (
echo %windows%
) else (
echo unknown operating system
)
:ReturnToBaseLine
echo checking internet connection
Ping www.google.nl -n 1 -w 1000
cls
if errorlevel 1 (set internet=Not connected to internet)
if errorlevel 0 (set internet=Connected to internet)
SET Connected=false
FOR /F "usebackq tokens=1" %%A IN (`PING google.com`) DO (
REM Check the current line for the indication of a successful connection.
IF /I "%%A"=="Reply" SET Connected=true
)
REM Check if a success was found.
IF "%Connected%"=="true" SET internet=Connected to internet
REM If we get here, we are not connected.
set internet=Not connected to internet
pause
REM Quit.
color 0a
cls
echo Made By The Amazing
echo.
echo ____ _ ________ ___
echo / __/___(_)___ /_ __/ / ___ / _ \_______ ___ ___ _ ___ ____
echo / _// __/ / __/ / / / _ \/ -_) / // / __/ -_) _ `/ ' \/ -_) __/
echo /___/_/ /_/\__/ /_/ /_//_/\__/ /____/_/ \__/\_,_/_/_/_/\__/_/
echo.
Echo %bit% processor architecture versie %versienummer%
echo %windows%
echo %internet%
echo.
----------------------------- edit 3 ---------------- -
DONE
答案 0 :(得分:10)
通过调整,您的原始代码将起作用。
echo checking internet connection
Ping www.google.nl -n 1 -w 1000
cls
if errorlevel 1 (set internet=Not connected to internet) else (set internet=Connected to internet)
echo %internet%
如果IF ERRORLEVEL n
为n 或大于n ,则问题是errorlevel
为TRUE。因此IF ERRORLEVEL 0
总是如此。 IF NOT ERRORLEVEL 1
是对errorlevel = 0的测试。 IF %ERRORLEVEL%==0
也是如此,除了前者可以在一个块中使用,但后者不能。
Nence,您的代码 设置not connected
,但由于if
条件始终为true,以下行会用第二条消息覆盖该值。
请注意,set "%internet%"=="Connected to internet"
表示“设置变量,其名称存储在变量internet
中为值”
因此,如果internet
当时的值为fred
,那么fred
将设置为值,而不是internet
。
此外,在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)
。< / p>
因此,由于您使用块(internet
语句序列设置if - true
,因此您需要使用两种常用方法之一来克服此问题.1)使用setlocal enabledelayedexpansion
并使用!var!
代替%var%
来访问已更改的var
或2的值)以调用子例程以使用更改的值执行进一步处理。与第二种技术相关的方法是使用语句call echo %%internet%%
在块中显示internet
的更改值。
答案 1 :(得分:3)
另一种选择......
ping -n 2 -w 700 10.11.1.1 | find "bytes="
IF %ERRORLEVEL% EQU 0 (
SET internet=Connected to the internet.
) ELSE (
SET internet=Not connected to the internet.
)
echo %internet%
这很有效,因为......
Reply from 10.11.1.106: Destination host
unreachable.
,因为它的错误级别为零,这就失败了。 (至少对我来说)ping -n 2
仍将通过。答案 2 :(得分:0)
这对我有用。这个想法是检查以“Reply”开头的行的PING
结果的每一行(表示成功),如果它在一行上找到它,那么它将%Connected%
变量设置为{{ 1}}。
true
答案 3 :(得分:0)
使用ping并不是测试Internet连接的好主意。 几个防火墙阻止ping数据包。我建议使用正式的MS命令行实用程序portqry。 https://support.microsoft.com/it-it/help/310099/description-of-the-portqry-exe-command-line-utility