【问题标题】:Batch file: Check if OS is Windows 10批处理文件:检查操作系统是否为 Windows 10
【发布时间】:2016-03-22 22:22:00
【问题描述】:

我想制作一个批处理文件,它将执行以下操作:检查正在运行的操作系统是否为 windows。如果超过它应该打印Hello. Im win 10 否则应该打印其他消息。如果有条件,我该怎么做?

伪代码:

if OS == Win10 then
   echo Hello im win 10
else
   echo I am another os

【问题讨论】:

    标签: windows batch-file cmd operating-system detect


    【解决方案1】:
    setlocal
    for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j
    if "%version%" == "6.3" echo Windows 8.1
    if "%version%" == "6.2" echo Windows 8.
    if "%version%" == "6.1" echo Windows 7.
    if "%version%" == "6.0" echo Windows Vista.
    if "%version%" == "10.0" echo Windows 10.
    echo %version%
    rem etc etc
    endlocal
    

    【讨论】:

    • 谢谢。这正是我所需要的
    • 此方法不适用于 Windows XP,因为 ver 输出 Microsoft Windows XP [Version 5.1.2600],因此将 [Version.5 分配给变量 VERSION。但是,它仅适用于检查操作系统是否为 Martin Rezyne 所要求的 Windows 10。
    • @Mofi - 不管怎样,%VERSION% 的值不会是10.0,因此它可用于检查您是否正在运行 Windows 10。它不会帮助获取实际版本,但这不是问题所在。
    • 答案不全,漏掉了“else echo I am another os”部分
    【解决方案2】:

    如果你想要更详细一点:

    for /f "tokens=2 delims=," %%i in ('wmic os get caption^,version /format:csv') do set os=%%i
    echo Hello, I am %os%
    

    或只是满足您的要求:

    for /f "tokens=2 delims=," %%i in ('wmic os get caption^,version /format:csv') do set os=%%i
    echo %os%|find " 10 ">nul &&echo Hello I'm Windows 10||echo I am another os
    

    ,version 确保您想要的字符串不是最后一个标记,其中包含丑陋的 wmic 行结尾)

    【讨论】:

    • 此方法甚至适用于 Microsoft 现在不再支持的 Windows XP Professional。但与使用命令 ver 的输出相比,它的速度很慢,因为 wmic 总是需要超过 1 秒才能完成。
    【解决方案3】:

    我改进了 Vertexwahn 的脚本以支持更多 Windows 版本:

    setlocal
    for /f "tokens=2 delims=[]" %%i in ('ver') do set VERSION=%%i
    for /f "tokens=2-3 delims=. " %%i in ("%VERSION%") do set VERSION=%%i.%%j
    if "%VERSION%" == "5.00" echo Windows 2000
    if "%VERSION%" == "5.0" echo Windows 2000
    if "%VERSION%" == "5.1" echo Windows XP
    if "%VERSION%" == "5.2" echo Windows Server 2003
    if "%VERSION%" == "6.0" echo Windows Vista
    if "%VERSION%" == "6.1" echo Windows 7
    if "%VERSION%" == "6.2" echo Windows 8
    if "%VERSION%" == "6.3" echo Windows 8.1
    if "%VERSION%" == "6.4" echo Windows 10
    if "%VERSION%" == "10.0" echo Windows 10
    echo %VERSION%
    endlocal
    

    【讨论】:

      【解决方案4】:

      另一种简单的方法:

      @Echo Off
      SystemInfo | Find "OS Name:" >tmp.txt
      Type tmp.txt | Find "10" >nul 2>&1  || (
        Del tmp.txt
        Echo OS Not Windows 10
        Pause 
        Exit /B
      )
      
      Del tmp.txt
      
      :: Main Program
      

      【讨论】:

      • 问题:systeminfo 的输出取决于语言,因此这仅适用于英语版本的 Windows。 (除此之外,systeminfo 与其他答案中的方法相比相当慢)
      • 但是 OP 的语言环境似乎是英语。
      【解决方案5】:

      快速简单...

      wmic OS get OSArchitecture,caption | FIND "10" >nul || GOTO Not_Win10
      
      :: Your Program...
      
      :Not_Win10
      ECHO Not Compatible
      pause
      exit
      

      不使用标签/转到:

      wmic OS get OSArchitecture,caption | FIND "10" >nul || ECHO System not Windows 10 && TIMEOUT 3 >nul && EXIT
      
      ECHO System is Windows 10.
      pause
      ::: Your Program
      

      【讨论】:

      • 抱歉误会了。我已经习惯了。删除评论。
      【解决方案6】:

      我知道这是一个旧帖子,但我想通过上述版本发布。使用系统信息对我来说太慢了;我想要更多的服务器版本检测

      @echo off
      
      setlocal
      
      REM had to wrap this to catch errors on server 2008
      (for /f "tokens=2 delims=," %%i in ('wmic os get caption^,version /format:csv') do set tmp=%%i)>nul 2>&1
      
      if "%tmp%" equ "" (
          set os=Error During OS lookup
      ) else (
          set os=%tmp%
      )
      
      echo %os%
      
      
          echo %os% | findstr /C:"Server" 1>nul
          if errorlevel 1 (       
              net statistics server>nul 2>&1
              if errorlevel 1 (
                  set isServer=0
              ) else (
                  # rem for server 2008, but also final check
                  set isServer=1
              )
          ) else (
              set isServer=1
          )
      
      
      
      for /f "tokens=2 delims=[]" %%i in ('ver') do set VERSION=%%i
      for /f "tokens=2-3 delims=. " %%i in ("%VERSION%") do set VERSION=%%i.%%j
      if "%VERSION%" == "5.00" echo Windows 2000
      if "%VERSION%" == "5.0" echo Windows 2000
      if "%VERSION%" == "5.1" echo Windows XP
      if "%VERSION%" == "5.2" echo Windows Server 2003
      if "%VERSION%" == "6.0" (
          if "%isServer%" equ "0" (
              echo Windows Vista
          ) else (
              echo Server 2008 Enterprise
          )
      
      )
      if "%VERSION%" == "6.1" (
          if "%isServer%" equ "0" (
              echo Windows 7
          ) else (
              echo Server 2008
          )
      
      )
      if "%VERSION%" == "6.2" echo Windows 8
      if "%VERSION%" == "6.3" (
          if "%isServer%" equ "0" (
              echo Windows 8.1
          ) else (
              echo Server 2012
          )
      )
      if "%VERSION%" == "6.4" echo Windows 10
      if "%VERSION%" == "10.0" (
          if "%isServer%" equ "0" (
              echo Windows 10
          ) else (
              echo %os% | findstr /C:"2016" 1>nul
              if not errorlevel 1 (
                  echo Server 2016
              )
              echo %os% | findstr /C:"2019" 1>nul
              if not errorlevel 1 (
                  echo Server 2019
              )
          )
      )
      
      echo %VERSION%
      echo %isServer%
      endlocal
      
      pause
      

      【讨论】:

        猜你喜欢
        • 2012-08-16
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 2016-05-09
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        • 2018-06-25
        相关资源
        最近更新 更多