检测精确的Windows 10版本以批处理文件中的回显彩色文本

时间:2017-03-29 20:42:20

标签: windows batch-file

基于此帖子更改Windows 10中命令提示文本的输出颜色,我正在寻找在批处理文件IF语句中检测操作系统版本的最佳方法。

How to echo with different colors in the Windows command line

根据我的理解,在Windows 10 Threshold 2 2015年11月18日(10.0.10586.11)中添加了彩色文本

在Windows 10版本的历史记录中,直到版本1607(周年纪念更新),有一个major.minor.build.revision编号方案,所以我希望检测非常精细。

https://en.wikipedia.org/wiki/Windows_10_version_history

我发现这篇文章将major.minor.build与用户输入进行了比较,但不能围绕它为我的需求做些什么。

https://github.com/LogicDaemon/PersonalUseScripts/blob/c3346df9c7c0f57b584b5c0238b8e8b76096c42c/cmd/superuser%20q%20891742/CheckWinVer.cmd

因此,基于该信息,我试图将检测到的Windows版本与批处理文件中的10.0.10586.11进行比较。

如果大于或等于该版本,请将文本着色,如果不使用标准格式。

这是我第一次尝试在IF语句中着色文本。虽然这似乎适用于Windows 10,但它在Windows 8.1中并不起作用,因为字符串" 10。"小于" 6.3"

FOR /F "tokens=4-5 delims=. " %%i in ('ver') DO SET Version=%%i.%%j
IF "%Version%" GEQ "10.0" (echo [92mHere is my text in green.[0m) ELSE (echo Here is my text)

请注意上述示例中缺少必需的转义字符

1 个答案:

答案 0 :(得分:3)

比较数值而不是字符串(例如Windows 8.1返回603):

FOR /F "tokens=4-5 delims=. " %%i in ('ver') DO SET /A _Version=%%i*100+%%j
IF %_Version% GEQ 1000 (echo [92mHere is my text in green.[0m) ELSE (echo Here is my text)

修改即可。我在Microsoft的TechNet网站上使用主要来源Windows 10 release information而不是维基百科。

FOR /F "tokens=4-7 delims=[]. " %%i in ('ver') DO (
  SET /A _MajorMinor = %%i * 100 + %%j
  set /A _Build      = %%k0 /10
  set /A _Revision   = %%l0 /10
)
set "_AE="        AE like Ansi Escape
IF %_MajorMinor% GEQ 1000 if %_Build% GTR 10586 ( set "_AE=Yes" ) else ( 
      if %_Build% EQU 10586 if %_Revision% GEQ 11 set "_AE=Yes" )
rem use the _AE flag
if defined _AE (echo [92mHere is my text in green.[0m) ELSE (echo Here is my text)

使用嵌套IF s(从逻辑AND生效)。

set /A _Revision = %%l0 /10构造用于在Windows 8上避免Missing operator,其中第7个标记%%l导致空字符串。