maphew

winver2.cmd

@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