基于此帖子更改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与用户输入进行了比较,但不能围绕它为我的需求做些什么。
因此,基于该信息,我试图将检测到的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)
请注意上述示例中缺少必需的转义字符
答案 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
导致空字符串。