[英]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 8
、 Windows 8.1
、 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
注意:此方法在某些早期操作系统上可能存在问题,因为存在阻止它们查找.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.