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

问题描述 投票:0回答:4

虽然编写脚本时必须确定计算机正在运行的Windows版本。唯一的问题是Windows 10Server 2016具有相同的版本号

这是我当前的代码。在这种情况下,Windows10Server2016用相同的数字标识,因此代码不起作用。 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 Prowmic os get name的输出:

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

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

Name                                                                       
Microsoft Windows Server 2016 Standard|C:\Windows|\Device\Harddisk0\Partition2
windows batch-file scripting wmic
4个回答
4
投票

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

Windows 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 文件位置的错误。 [有解决方法,可以从您的'language'目录中复制.xsl文件到更高级别,或者提供.xsl文件的完整路径,例如.xsl


3
投票

直接说吧...

/Format:"%__AppDir__%wbem\en-US\MOF.xsl"

1
投票

这很简单:

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

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

@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%.

这将提取操作系统,在两种情况下都减去@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)。


-2
投票

您可以使用<CR><CR><LF>命令,这是一个示例:

ver

使用变量@echo off for /f "useback delimes=;" %%a in (`ver`) do set ver=%%a echo The computer version your running is %ver% 作为您正在运行的版本,我用它来%ver%版本,但是您可以使用它进行任何操作

© www.soinside.com 2019 - 2024. All rights reserved.