用于检查 Windows 版本,然后仅对版本 10.0(2016 或更高版本)执行操作的脚本



我正在开发一个脚本,目标是仅在Windows 10.0或更高版本上执行操作。

我尝试启动我的代码,但这两个操作都执行了,在 Win 2016 上,批处理通常应该只执行与 if/else 中的 goto 相关的程序

@echo off
setlocal
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
echo %version%
pause
if "%version%" geq "10.0" ( goto :AddWinDefenderExclusion )
else ( goto :NoWinDefenderExclusion )
:AddWinDefenderExclusion
echo Windows Defender Exclusion will be added

:NoWinDefenderExclusion
echo No Windows Defender Exclusion to add (Not a Windows 2016 or greater)
endlocal

你能帮我实现版本控制然后采取正确的行动吗?

您应该在 :AddWinDefenderExclusion 和 :NoWinDefenderExclusion 标签的末尾添加一个goto :eof([SS64]GOTO(。从技术上讲,您不必为最后一个执行此操作(因为它无论如何都会达到eof(,但是您应该这样做:

  • 为了保持一致性
  • 如果在它之后添加其他说明,您不会遇到麻烦

脚本.bat

@echo off
setlocal
for /f "tokens=4-5 delims=. " %%i in ('ver') do (
    set VERSION_MAJ=%%i
    set VERSION_MIN=%%j
)
set MAJ_REQ=10
set MIN_REQ=0
echo %VERSION_MAJ%.%VERSION_MIN%
if %VERSION_MAJ% gtr %MAJ_REQ% (
        goto :AddWinDefenderExclusion
) else if %VERSION_MAJ% equ %MAJ_REQ% (
    if %VERSION_MIN% geq %MIN_REQ% (
        goto :AddWinDefenderExclusion
    )
)
goto :NoWinDefenderExclusion
goto :eof
:AddWinDefenderExclusion
    echo Windows Defender Exclusion will be added
    pause
    goto :eof
:NoWinDefenderExclusion
    echo No Windows Defender Exclusion to add (Not a Windows 2016 or greater)$
    pause
    goto :eof

您可能可以使用 wmic 最容易地做到这一点:

@Echo Off
WMIC OS Where "Version Like '__.%%'" Get Status 2> NUL | Find "Status" > NUL && (
    Echo Windows Defender Exclusion will be added
) || Echo No Windows Defender Exclusion to add [Not Windows 2016 or greater]
Pause

如果您的脚本根本不适用于Windows 10之前的任何版本的Windows,那么这可能会更好:

@Echo Off
WMIC OS Where "Version Like '__.%%'" Get Status 2> NUL | Find "Status" > NUL || Exit /B
Echo Windows Defender Exclusion will be added & Pause

最后一行显然是您提供自己的代码的地方。

感谢您的回答。

这是我的最终代码:

@echo off
setlocal
for /f "tokens=4-5 delims=. " %%i in ('ver') do (
    set VERSION=%%i
)
if %version% GEQ 10 (
    goto :ADDEXCLUSION
) else (
    goto :NOEXCLUSION
)
:ADDEXCLUSION
echo ADDEXCLUSION
pause
goto :eof
:NOEXCLUSION
echo NOEXCLUSION
pause
goto :eof

我认为如果GEQ只能与数字一起使用,没有引号,它比较数字,用引号在变量上%version%和值它比较字符串。就我而言,我的脚本检查版本号(前 2 位数字(。

谢谢大家。

相关内容

最新更新