基于这篇关于更改 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与用户输入进行了比较,但无法理解它为我的需求所做的事情。
因此,根据该信息,我尝试在批处理文件中将检测到的 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/