[英]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.