如何使用批处理确定计算机运行的 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?
What I would like to do is parsewmic os get name
to get the OS name. This is showing some challenges because the output is multiple lines and there is an arbitrary number of characters before and after the OS name ('Windows 10').
这是 wmic os get name
在 windows 10 pro 上的输出:
Name
Microsoft Windows 10 Pro|C:\WINDOWS|\Device\Harddisk1\Partition3
这是 wmic os get name
在 Server 2016 上的输出:
Name
Microsoft Windows Server 2016 Standard|C:\Windows|\Device\Harddisk0\Partition2
这很简单:
@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
这将提取 OS,在两种情况的末尾减去 Microsoft<space>
。
在第二种情况下,使用了两个循环,因为 wmic
有 不寻常的行 endings (<CR><CR><LF>
).
直截了当...
@echo off
for /f "skip=1 delims=|" %%i in ('wmic os get name') do echo %%i & exit /b
我知道你已经选择了一个解决方案,但如果这与你问的最后一个问题有关,现已删除,你只是想确定 [= =13=]、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
循环,然后删除一个或多个尾随 space 字符).:
@For /F Tokens^=6Delims^=^" %%A In ('WMIC OS Get Caption/Format:MOF')Do Set "_S=%%A"
要测试它只需添加第二行:
@Set _S&Pause
注意:此方法在某些较早的操作系统上可能会出现问题,因为存在阻止它们找到 .xsl
文件位置的错误。 有解决方法,可以将 'language' 目录中的 .xsl
文件复制到上一层,或者提供 .xsl
文件的完整路径,例如/Format:"%__AppDir__%wbem\en-US\MOF.xsl"
.
你可以使用ver
命令,这里是一个例子:
@echo off
for /f "useback delimes=;" %%a in (`ver`) do set ver=%%a
echo The computer version your running is %ver%
使用变量 %ver%
作为你的版本 运行,我用它来 echo
版本,但你可以用它做任何事情
在编写脚本时,有必要确定计算机 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?
What I would like to do is parse
wmic os get name
to get the OS name. This is showing some challenges because the output is multiple lines and there is an arbitrary number of characters before and after the OS name ('Windows 10').
这是 wmic os get name
在 windows 10 pro 上的输出:
Name
Microsoft Windows 10 Pro|C:\WINDOWS|\Device\Harddisk1\Partition3
这是 wmic os get name
在 Server 2016 上的输出:
Name
Microsoft Windows Server 2016 Standard|C:\Windows|\Device\Harddisk0\Partition2
这很简单:
@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
这将提取 OS,在两种情况的末尾减去 Microsoft<space>
。
在第二种情况下,使用了两个循环,因为 wmic
有 不寻常的行 endings (<CR><CR><LF>
).
直截了当...
@echo off
for /f "skip=1 delims=|" %%i in ('wmic os get name') do echo %%i & exit /b
我知道你已经选择了一个解决方案,但如果这与你问的最后一个问题有关,现已删除,你只是想确定 [= =13=]、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
循环,然后删除一个或多个尾随 space 字符).:
@For /F Tokens^=6Delims^=^" %%A In ('WMIC OS Get Caption/Format:MOF')Do Set "_S=%%A"
要测试它只需添加第二行:
@Set _S&Pause
注意:此方法在某些较早的操作系统上可能会出现问题,因为存在阻止它们找到 .xsl
文件位置的错误。 有解决方法,可以将 'language' 目录中的 .xsl
文件复制到上一层,或者提供 .xsl
文件的完整路径,例如/Format:"%__AppDir__%wbem\en-US\MOF.xsl"
.
你可以使用ver
命令,这里是一个例子:
@echo off
for /f "useback delimes=;" %%a in (`ver`) do set ver=%%a
echo The computer version your running is %ver%
使用变量 %ver%
作为你的版本 运行,我用它来 echo
版本,但你可以用它做任何事情