windows - 检测确切的 Windows 10 版本以在批处理文件中回显彩色文本

标签 windows batch-file

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

How to echo with different colors in the Windows command line

据我了解,彩色文本是在 2015 年 11 月 18 日的 Windows 10 Threshold 2 (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)

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

最佳答案

比较数值而不是字符串(例如 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)

编辑。我会使用主要来源 Windows 10 release information 而不是维基百科。在 Microsoft 的 TechNet 网站上。

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(从逻辑AND开始有效)。

set/A _Revision = %%l0/10 构造用于避免 Windows 8 上的缺少运算符,其中第 7 个标记 %%l 结果为空字符串。

关于windows - 检测确切的 Windows 10 版本以在批处理文件中回显彩色文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43103752/

相关文章:

windows - 将 COBOL 编译为适用于 Windows 的 32 位可执行文件

php - 警告 : mkdir(): Permission denied

c# - 免注册 com dll 要求安装 .net Framework 3.5,而注册后它工作正常

c++ - MinGW/msys,链接器 (ld.exe) 没有找到 libpng (-lpng),即使它已安装,正在运行 xpdf 配置脚本

batch-file - 列出不以以下开头的目录

batch-file - “ls”不被识别为内部或外部命令、可操作程序或批处理文件

windows - * 1 的奇怪行为

text - 使用 Notepad++ 使用批处理文件查找文本

c# - WPF + 在 TextBlock 中显示 bat 文件的输出

vb.net - 在批处理文件中使用 Visual Basic 中的字符串