首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脚本检查Windows版本,然后仅在10.0版(2016或更高版本)上执行操作

脚本检查Windows版本,然后仅在10.0版(2016或更高版本)上执行操作
EN

Stack Overflow用户
提问于 2019-06-13 09:14:02
回答 3查看 688关注 0票数 0

我正在开发一个脚本,目标是只在WindowsVersion10.0或更高版本上执行一个操作。

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

代码语言:javascript
复制
@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

你能帮我实现版本控制然后正确的操作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-13 09:26:03

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

  • 为了一致性
  • 如果在后面添加其他指令,您不会遇到麻烦。

script.bat

代码语言:javascript
复制
@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
票数 0
EN

Stack Overflow用户

发布于 2019-06-13 11:09:19

您可能可以使用威麦克最简单地完成这一任务。

代码语言:javascript
复制
@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之前的任何版本,那么这可能会更好:

代码语言:javascript
复制
@Echo Off
WMIC OS Where "Version Like '__.%%'" Get Status 2> NUL | Find "Status" > NUL || Exit /B
Echo Windows Defender Exclusion will be added & Pause

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

票数 0
EN

Stack Overflow用户

发布于 2019-06-13 11:45:26

谢谢你的回答。

这是我的最后代码:

代码语言:javascript
复制
@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位)。

谢谢大家。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56577174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档