バッチファイルが実行されているWindowsやcmd.exeのバージョンを確認するにはどうすればよいですか?
私が見つけることができたcmd /version
はなく、コマンドプロンプトセッションでのSETの結果は、明らかにユニークなものを与えません(とにかくXPとWin7の間))。
以前に存在しなかった機能(cmd.exe
など)を使用しない限り、command.com
shouldのバージョンは実際にはあまり関係ありません。疑似変数があります
%cmdextversion%
これは、古くから2であったコマンド拡張のバージョンを保持しています(少なくともNT 4、iircに戻っています)。
しかし、要点に戻ると、ver
を実行してバージョン文字列を解析するのが最善の策かもしれません。
for /f "tokens=2 delims=[]" %%x in ('ver') do set WINVER=%%x
set WINVER=%WINVER:Version =%
"systeminfo" @ cmd.exeを使用できます
C:\Users\Tagon8>systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name: Microsoft Windows 8 Release Preview
OS Version: 6.2.8400 N/A Build 8400
私もverを使ってより短い方法を見つけました:
さらに短くなる可能性があります:
ver | find "5.1" >nul && goto ver_winxp
ver
を使用する短い方法も見つけました:
...
ver | find "5.1"
if %ERRORLEVEL% == 0 goto ver_winxp
...
これでXPが見つかり、文字列を必要なバージョンに置き換えます
コマンドプロンプトで「ver」と入力します。
次回は、これは実際にはプログラミング関連ではなく、サーバーまたはユーザー関連なので、serverfault.comまたはsuperuser.comを試してみてください。
たぶん誰かがSKU(Win7)を決定するために以下を必要とするでしょう。このスクリプトの一部を使用して、sysprep中に適切なOSとXMLを選択しています。それが役に立てば幸い!
@echo off
set ver=Unknown
systeminfo > C:\sysinfo
findstr /e /c:"Enterprise " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Enterprise
findstr /e /c:"Ultimate " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Ultimate
findstr /e /c:"Professional " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Professional
findstr /e /c:"Home Premium " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Home Premium
findstr /e /c:"Home Basic " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Home Basic
del /f /q C:\SP\sysinfo 1>nul 2>nul
Echo Windows 7 %ver%
pause
exit
内部コマンドver
は、Windowsのバージョン番号を報告します(これは、コマンドプロンプトでhelp
と入力して知ることができます)。
動的変数%CMDEXTVERSION%
がありますが、いくつかのリリースでは進歩していないため、Windows NTとWindows 2000の間で を描くのにのみ役立ちます。新しい 。 (@Joey、 here に感謝します。)
XP以降、 Simon Sheppard の好意で)のverの出力を解析するバッチは次のとおりです。
@echo off
Setlocal
:: Get windows Version numbers
For /f "tokens=2 delims=[]" %%G in ('ver') Do (set _version=%%G)
For /f "tokens=2,3,4 delims=. " %%G in ('echo %_version%') Do (set _major=%%G& set _minor=%%H& set _build=%%I)
Echo Major version: %_major% Minor Version: %_minor%.%_build%
if "%_major%"=="5" goto sub5
if "%_major%"=="6" goto sub6
Echo unsupported version
goto:eof
:sub5
::Winxp or 2003
if "%_minor%"=="2" goto sub_2003
Echo Windows XP [%PROCESSOR_ARCHITECTURE%]
goto:eof
:sub_2003
Echo Windows 2003 or xp 64 bit [%PROCESSOR_ARCHITECTURE%]
goto:eof
:sub6
if "%_minor%"=="1" goto sub7
Echo Windows Vista or Windows 2008 [%PROCESSOR_ARCHITECTURE%]
goto:eof
:sub7
Echo Windows 7 or Windows 2008 R2 [%PROCESSOR_ARCHITECTURE%]
goto:eof
そして、ここに私自身のかなり完全な、主に学術的なキックがあります。これは、解析されたバージョン番号を環境変数として返す缶です。
@echo off
setlocal
:: from http://ss64.org/viewtopic.php?pid=3136#p3136
::==================================
::variables
if %PROCESSOR_ARCHITECTURE%==x86 set pro_Arch=32 Bit (x86)
if %PROCESSOR_ARCHITECTURE%==AMD64 set pro_Arch=64 Bit (AMD64)
if %PROCESSOR_ARCHITECTURE%==IA64 set pro_Arch=Itanium 64 Bit (IA64)
:Main
call :clean
for /f "tokens=2 delims=[]" %%x in ('ver') do set cmdver=%%x
set cmdver=%cmdver:Version =%
call :parse_cmdver
call :ver%cmdver%
call :Report
goto :End
:clean
:: Ensure we don't inherit values from previous runs
set _verCmd=
set _verMajor=
set _verMinor=
set _verBuild=
set _verWin=
goto :eof
:Parse_cmdver
:: Turn "5.1.2306" string into actionable variables
for /f "tokens=1,2,3* delims=." %%g in ("%cmdver%") do (
set major=%%g
set minor=%%h
set build=%%i
)
goto :eof
:Report
echo.
echo. CMD version is %cmdver%
echo. which probably means %longver% %pro_Arch%
echo.
goto :eof
:Report2
echo. The numbers are stored in the following variables:
echo.
set _ver
goto :eof
::Table of version numbers built from
:: http://en.wikipedia.org/wiki/Microsoft_Windows#Timeline_of_releases
:ver1.01
set longver=Windows 1.01
set shortver=Win101
goto :eof
:ver2.03
set longver=Windows 2.03
set shortver=Win203
goto :eof
:ver2.10
set longver=Windows 2.10
set shortver=Win21
goto :eof
:ver2.11
set longver=Windows 2.11
set shortver=Win211
goto :eof
:ver3.0
set longver=Windows 3.0
set shortver=Win3
goto :eof
:ver3.1
set longver=Windows 3.1, Windows For Workgroups 3.1, or Windows NT 3.1
set shortver=Win31/WFW31/WinNT31
goto :eof
:ver3.11
set longver=Windows For Workgroups 3.11
set shortver=WFW311
goto :eof
:ver3.2
set longver=Windows 3.2 (released in Simplified Chinese only)
set shortver=Win32ch
goto :eof
:ver3.5
set longver=Windows NT 3.5
set shortver=WinNT35
goto :eof
:ver3.51
set longver=Windows NT 3.51
set shortver=WinNT351
goto :eof
:ver4.0.950
set longver=Windows 95
set shortver=Win95
goto :eof
:ver4.0.1381
set longver=Windows NT 4.0
set shortver=WinNT4
goto :eof
:ver4.90.3000
set longver=Windows Me
set shortver=WinMe
goto :eof
:ver4.10.1998
set longver=Windows 98
set shortver=Win98
goto :eof
:ver4.10.2222
set longver=Windows 98 SE
set shortver=Win98SE
goto :eof
:ver5.0.2195
set longver=Windows 2000
set shortver=Win2K
goto :eof
:ver5.1.2600
set longver=Windows XP or Windows Fundamentals for Legacy PCs
set shortver=WinXP/WinFun
goto :eof
:ver5.2.3790
set longver=Windows XP, Windows XP Pro or Windows Server 2003
set shortver=WinXP/WinXP-Pro/Server2003
goto :eof
:ver5.2.4500
set longver=Windows Home Server
set shortver=WinHomeServer
goto :eof
:ver6.0.6002
set longver=Windows Vista or Windows Server 2008
set shortver=Vista/Server2008
goto :eof
:ver6.1.7600
set longver=Windows 7 or Windows Server 2008 R2
set shortver=Win7/Server2008R2
goto :eof
:End
:: return version to calling Shell/script,
:: see http://ss64.com/nt/syntax-functions.html
endlocal & set _verCmd=%cmdver% & set _verMajor=%major% & set _verMinor=%minor% & set _verBuild=%build% & set _verWin=%shortver%
call :Report2 :: comment this line out to suppress extra reporting
WMIC
を使用してWindowsのバージョンを見つけるには、次を使用できます。
wmic os get version