我想检查互联网连接,当它失败时,我想设置%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
- - - - - - - -编辑 - - - - - -
这是更多的代码。
@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.
-----------------------------编辑3 ------------------
完成
稍作调整,您的原始代码即可使用。
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
如果errorlevel
n或大于n,则为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
则将其设置为not internet
。
此外,在block语句中(a parenthesised series of statements)
,将解析整个块然后执行。解析该块时-执行该块之前-该块中的任何内容%var%
都将由该变量的值替换-同样适用于。FOR ... DO (block)
因此,由于您要设置internet
一个块(if - true
语句序列),因此您需要使用两种常用方法之一来克服此问题:1)使用setlocal enabledelayedexpansion
和!var!
代替%var%
来访问var
或的更改值2)调用子例程使用更改后的值进行进一步处理。从技术上讲,与第二种方法相关的一种方法是使用该语句call echo %%internet%%
显示internet
块中更改的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句