如何使用批处理确定计算机运行的Windows版本?

时间:2019-02-10 17:50:23

标签: windows batch-file scripting wmic

在编写脚本时,有必要确定计算机运行的Windows版本。唯一的问题是 Windows10和Server2016 具有相同的 版本号

这是当前代码。在这种状态下,Windows10和Server2016用相同的数字标识(这不起作用)。 wmic os get version输出= 10.0.18329

for /f "tokens=4-5 delims=. " %%i in ('ver') do set Operating=%%i.%%j
if "%Operating%" == "6.3" set Operating=Windows81
if "%Operating%" == "6.2" set Operating=Windows8
if "%Operating%" == "10.0" set Operating=Windows10
if "%Operating%" == "10.0" set Operating=Server2016
echo Is %Operating% your operating system?

  

我想做的就是解析wmic os get name以获取操作系统名称。这显示了一些挑战,因为输出是多行,并且操作系统名称(“ Windows 10”)前后都有任意数量的字符。


这是Windows 10专业版上wmic os get name的输出:

Name
Microsoft Windows 10 Pro|C:\WINDOWS|\Device\Harddisk1\Partition3

这是Server 2016上wmic os get name的输出:

Name                                                                       
Microsoft Windows Server 2016 Standard|C:\Windows|\Device\Harddisk0\Partition2

4 个答案:

答案 0 :(得分:4)

我知道您已经选择了一种解决方案,但是如果这与您提出的最后一个问题现在已删除有关,那么您只是在其中确定Windows 8Windows 8.1Windows 10Windows Server 2016,那么我会按照以下思路提出一些建议:

@Echo Off
Set "_S="
For /F "EOL=P Tokens=*" %%A In ('"WMIC OS Get ProductType,Version 2>Nul"'
) Do For /F "Tokens=1-3 Delims=. " %%B In ("%%A") Do Set /A _S=%%B,_V=%%C%%D
If Not Defined _S Exit /B
If %_V% Lss 62 Exit /B
If %_S% Equ 1 (If %_V% Equ 62 Set "_S=Windows8"
    If %_V% Equ 63 Set "_S=Windows81"
    If %_V% Equ 100 Set "_S=Windows10"
) Else If %_V% Equ 100 (Set "_S=Server2016") Else Exit /B
Set _S
Pause
Exit /B

[编辑/]

…对于通用方法,您可能会发现这很有用,尤其是使用Caption属性(我建议比使用Name属性要好得多,在第一个竖线字符处将其分割,再通过另一个For循环运行,然后删除一个或多个尾随空格字符)。:

@For /F Tokens^=6Delims^=^" %%A In ('WMIC OS Get Caption/Format:MOF')Do Set "_S=%%A"

要测试它,只需添加第二行:

@Set _S&Pause

注意:由于某些错误导致该方法无法找到.xsl文件的位置,因此该方法在某些较早的操作系统上可能会出现问题。 有一些解决方法,或者从您的“语言”目录中复制.xsl文件,或者提供.xsl文件的完整路径,例如/Format:"%__AppDir__%wbem\en-US\MOF.xsl"

答案 1 :(得分:3)

直接前进...

@echo off
for /f "skip=1 delims=|" %%i in ('wmic os get name') do echo %%i & exit /b

答案 2 :(得分:1)

这很简单:

@echo off

for /F "skip=1 tokens=2-4 delims=| " %%A IN ('wmic os get name') do (
    set "os=%%A %%B %%C"
)

echo You are using %os%.

另一种可能的解决方案,包括所有版本的Windows:

@echo off

for /F "skip=1 delims=|" %%A IN ('wmic os get name') do (
    for /F "delims=" %%B IN ("%%A") do (
        set "os=%%B"
    )
)

echo You are using %os:Microsoft =%.
pause
exit /b

将提取操作系统,在两种情况下都以Microsoft<space>结尾。

在第二种情况下,使用两个循环,因为wmic具有不寻常的行结尾 <CR><CR><LF>)。

答案 3 :(得分:-2)

您可以使用ver命令,这是一个示例:

@echo off
for /f "useback delimes=;" %%a in (`ver`) do set ver=%%a
echo The computer version your running is %ver%

使用变量%ver%作为您正在运行的版本,我用它echo作为版本,但是您可以使用它进行任何操作