Foreigner, %programfiles% - при условии, что в текущей сессии оная не была каким-то образом изменена, так что закладываться на почку, что это сработает, также не стоит. Говорю же, лучше брать данные из реестра, ведь никто в здравом уме их править не станет, если не хочет получить неработоспособного "ишака". На примере PowerShell это будет выглядеть примерно так:
Код:

$$ = (gp "HKLM:\SOFTWARE\Classes\CLSID\{$(
[Type]::GetTypeFromProgID('InternetExplorer.Application').GUID
)}\LocalServer32").'(default)' -replace [Char]34, ''
(gi "$($$)" -for).VersionInfo.ProductVersion
Примерно так же в случае с командным сценарием:
Код:

@echo off
setlocal
set "ie=HKLM\SOFTWARE\Microsoft\Internet Explorer"
for /f "tokens=3" %%i in (
'2^>nul reg query "%ie%" /v Version ^| findstr /irc:"reg_sz"'
) do 2>nul set /a "ie=%%~i"
if "%ie%" equ "" echo:Could not locate IE data.&goto:eof
set "key=HKCR\InternetExplorer.Application\CLSID"
for /f "tokens=3" %%i in ('reg query %key% /ve') do (
set "key=%key%\%%i" % rem : извлекли CLSID
)
set "key=%key:InternetExplorer.Application\=%"
for /f "tokens=2,*" %%i in (
'reg query %key%\LocalServer32 /ve'
) do set "p=%%~j"
echo:Current version of %p% is %ie%.
endlocal
exit /b
Правда в отличии от CLSID'а версию можно безболезненно изменить, если достаточно прав на изменения значения реестра.