【问题标题】:How to compare windows versions in a batch script?如何在批处理脚本中比较 Windows 版本?
【发布时间】:2011-01-26 19:13:04
【问题描述】:

我习惯于在 Linux 中编写脚本编程,但现在我需要为 windows 编写一个非常简单的脚本,该脚本会根据操作系统的版本执行某些操作。

我看到ver命令返回版本,但是我不知道如何比较这个命令的输出和字符串。

在伪代码中我只需要:

version = system('ver')
if version > WINDOWS_XP_VERSION then
    do_something();
end if

或者好吧,现在它也可以做到:

version = system('ver')
if version in [WINDOWS_VISTA_VERSION, WINDOWS_7_VERSION] then
    do_something();
end if

我主要关心的是如何比较命令的输出。

【问题讨论】:

    标签: windows command-line batch-file cmd


    【解决方案1】:
    set Version=
    for /f "skip=1" %%v in ('wmic os get version') do if not defined Version set Version=%%v
    for /f "delims=. tokens=1-3" %%a in ("%Version%") do (
      set Version.Major=%%a
      set Version.Minor=%%b
      set Version.Build=%%c
    )
    
    set GTR_XP=
    if %Version.Major%==5 if %Version.Minor% GTR 1 set GTR_XP=1
    if %Version.Major% GTR 5 set GTR_XP=1
    
    if defined GTR_XP (
      ...
    )
    

    【讨论】:

    • 谢谢,我终于会用这样的东西了。
    【解决方案2】:
    ::dirty
    for /f "tokens=9 delims=Version " %v in ('ver') do set version=%v
    for /f "tokens=1 delims=]" %v in ('echo %version%') do set version=%v
    if %version% geq 5.1.2600 ( echo yes )
    

    如果您将上述内容放在批处理文件中,请在%v 之前添加一个额外的%。我基于Wikipedia article.

    【讨论】:

    • 谢谢!它几乎成功了,现在的问题是ver 返回的字符串取决于操作系统的语言环境配置。有什么方法可以确保脚本使用英语语言环境运行? (即是否有等价于 LANG=C?)。或者......有什么办法可以从寄存器中读取版本?
    • 我不知道如何调整语言环境信息。尝试使用reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "CurrentVersion" 查询注册表。
    • 这不适用于 Windows 7 版本的字符串。我认为更好的分隔符是“[]”
    猜你喜欢
    • 2014-08-19
    • 2013-11-04
    • 1970-01-01
    • 2020-08-07
    • 2014-12-26
    • 1970-01-01
    • 2021-10-27
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多