繁体   English   中英

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

[英]How can I use batch to determine what version of windows a computer is runing?

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

这是当前的代码。 在这种状态下,Windows10 和 Server2016 被标识为相同的数字wmic os get输出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”)前后有任意数量的字符。


这是wmic os get name在 windows 10 pro 上的输出:

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

这是服务器 2016 上wmic os get name的输出:

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

我知道您已经选择了一个解决方案,但是如果这与您提出的最后一个问题有关,现在已删除,您只是想在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"

直接向前怎么样...

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

这很简单:

@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> )。

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

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

使用变量%ver%作为您正在运行的版本,我用它echo显版本,但您可以用它做任何事情

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM