【问题标题】:Detecting an OS batch检测操作系统批次
【发布时间】:2014-01-01 19:42:49
【问题描述】:

我需要一个可以显示它正在运行的女巫 Windows 操作系统的批处理脚本,因为我正在制作一个程序,并且它所做的事情受到它正在运行的女巫操作系统的极大影响。我需要它来测试的是:

Windows 8 32bit
Windows 8 64bit
Windows 7 32bit
Windows 7 64bit
Windows vista 32bit
Windows vista 64bit
Windows xp
Other

有谁知道我可以做什么,因为我不知道从哪里开始?

【问题讨论】:

  • 其他一些类似问题的答案使用了 wmic。见*.com/questions/16042339/os-name-variable
  • 为什么要使用批处理文件?你用什么语言写你的程序?如果您使用的是 .NET,则可以从代码中检测版本
  • 我正在使用批处理来制作完整的程序。

标签: windows batch-file operating-system


【解决方案1】:

检测Windows版本,创建变量OS_VERSION

@echo off
@break off
@title Detect Windows Version - Create Variable = OS_VERSION
@color 0a
@cls

ver | findstr /i "5\.0\.">nul
if %ErrorLevel% EQU 0 set "OS_VERSION=2000"

ver | findstr /i "5\.1\.">nul
if %ErrorLevel% EQU 0 set "OS_VERSION=XP"

ver | findstr /i "5\.2\.">nul
if %ErrorLevel% EQU 0 set "OS_VERSION=2003"

ver | findstr /i "6\.0\.">nul
if %ErrorLevel% EQU 0 set "OS_VERSION=Vista"

ver | findstr /i "6\.1\.">nul
if %ErrorLevel% EQU 0 set "OS_VERSION=7"

ver | findstr /i "6\.2\.">nul
if %ErrorLevel% EQU 0 set "OS_VERSION=8"

echo %OS_VERSION%
pause
exit

检测Windows BITS,创建变量OS_BITS

@echo off
@break off
@title Detect Windows BITS - Create Variable = OS_BITS
@color 0a
@cls

if "%ProgramW6432%" EQU "%ProgramFiles%" if "%CommonProgramW6432%" EQU "%CommonProgramFiles%" if defined ProgramFiles(x86) if exist "%SystemRoot%\SysWOW64\" (
  set "OS_BITS=64"
) else (
  set "OS_BITS=32"
)

echo %OS_BITS%
pause
exit

PS:在 Windows XP x86、Windows 7 x86、Windows 7 x64、Windows 8 x64、Windows 2008 x64 中测试

【讨论】:

    【解决方案2】:

    复制自"Determining OS version via Scripting":

    @echo off
    setlocal EnableDelayedExpansion
    
    ::Identify OS
    for /F "delims=" %%a in ('ver') do set ver=%%a
    set Version=
    for %%a in (95=95 98=98 ME=ME NT=NT 2000=2000 5.1.=XP 5.2.=2003 6.0.=Vista 6.1.=7 6.2.=8) do (
       if "!Version!" equ "this" (
          set Version=Windows %%a
       ) else if "!ver: %%a=!" neq "%ver%" (
          set Version=this
       )
    )
    
    ::Identify bit
    if exist "%SYSTEMDRIVE%\Program Files (x86)" (
       set Type=64 bit
    ) else (
       set Type=32 bit
    )
    
    ::Display result
    echo %Version% %Type%
    echo/
    pause
    

    【讨论】:

      【解决方案3】:

      与 ver 相比,WMIC 是更好的方法,因为它包含架构要求。

      wmic os get caption, OSArchitecture, version
      

      结果

      Caption                       OSArchitecture  Version
      Microsoft Windows 7 Ultimate  64-bit          6.1.7600
      

      编辑:我看到 75inch 在我发布我的信息时更新了他的 systeminfo 命令。无论哪种方式都可以。

      【讨论】:

        【解决方案4】:

        在 cmd 提示符下键入以下命令

        ver
        

        这将列出 microsoft windows 版本。您只需将每个版本相应地映射到您的功能即可。

        如果你需要比这更多的细节,systeminfo 命令会输出一堆信息。

        您可能想要过滤它。例如获取版本+服务包信息+处理器架构:

        systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
        

        在我的机器上输出以下内容:

         OS Name:                   Microsoft Windows 7 Enterprise
        OS Version:                6.1.7601 Service Pack 1 Build 7601
        System Type:               x64-based PC
        

        【讨论】:

        • 它可以工作,但它说“Microsoft Windows [6.1.7601]”它实际上并没有说 windows 7 32bit 或 windows 8 64bit 或批处理文件可以轻松读取的东西。
        • 查看编辑。输入系统信息。您可以通过向 findstr 添加额外的 /C:"Attribute Name" 参数来过滤您想要的任何结果
        • 你知道像“/C:”System Type“”位这样的任何其他命令吗,因为它也可以用作调试部分,所以它会告诉我它在哪种计算机上运行。 CPU速度和RAM会很好。谢谢
        • 只需输入系统信息。这将打印出它提供的所有可用字段。然后,您可以为要过滤掉的任何一个添加 /C:
        • 谢谢,我会试试的。
        【解决方案5】:

        使用ver 命令,然后使用“|”过滤

        例子

        ver|find "6.1" >nul && echo/Windows XP
        

        【讨论】: