簡體   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