Obter versão do Windows em um arquivo em lotes

Eu preciso para obter a versão do sistema operacional com um arquivo em lotes. Eu vi muitos exemplos online, muitos usam algo parecido com este código:

@echo off

ver | find "XP" > nul
if %ERRORLEVEL% == 0 goto ver_xp

if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit

systeminfo | find "OS Name" > %TEMP%\osname.txt
FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i

echo %vers% | find "Windows 7" > nul
if %ERRORLEVEL% == 0 goto ver_7

echo %vers% | find "Windows Vista" > nul
if %ERRORLEVEL% == 0 goto ver_vista

goto warnthenexit

:ver_7
:Run Windows 7 specific commands here.
echo Windows 7
goto exit

:ver_vista
:Run Windows Vista specific commands here.
echo Windows Vista
goto exit

:ver_xp
:Run Windows XP specific commands here.
echo Windows XP
goto exit

:warnthenexit
echo Machine undetermined.

:exit

O problema é quando eu executo isso no Vista ou no Windows 7 eu recebo a mensagem

Máquina indeterminada

Existe alguma outra maneira de fazer o que eu quero?

questionAnswers(14)

yourAnswerToTheQuestion