Windows: Command line to read version info of an executable file?
If you are willing and able to use PowerShell, the following code will work. If you are on a supported Windows system, PowerShell will be available.
(Get-Item -Path 'C:\Program Files\Java\jdk1.8.0_144\bin\java.exe').VersionInfo |
Format-List -Force
If you must run it in a cmd.exe shell, you could use:
powershell -NoLogo -NoProfile -Command ^
"(Get-Item -Path 'C:\Program Files (x86)\Java\jre1.8.0_201\bin\java.exe').VersionInfo |" ^
"Format-List -Force"
wmic datafile where name="C:\\Windows\\System32\\msiexec.exe" get Version /value
You can use wmic
to do it. And you can wrap it into a batch file
@echo off
setlocal enableextensions
set "file=%~1"
if not defined file goto :eof
if not exist "%file%" goto :eof
set "vers="
FOR /F "tokens=2 delims==" %%a in ('
wmic datafile where name^="%file:\=\\%" get Version /value
') do set "vers=%%a"
echo(%file% = %vers%
endlocal
Save it as (example) getVersion.cmd
and call as getVersion.cmd "c:\windows\system32\msiexec.exe"
edited to adapt to comments and not require administrator rights. In this case, an hybrid cmd/javascript file is used to query wmi. Same usage
@if (@this==@isBatch) @then
@echo off
setlocal enableextensions
set "file=%~f1"
if not exist "%file%" goto :eof
cscript //nologo //e:jscript "%~f0" /file:"%file%"
endlocal
exit /b
@end
var file = WScript.Arguments.Named.Item('file').replace(/\\/g,'\\\\');
var wmi = GetObject('winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2')
var files = new Enumerator(wmi.ExecQuery('Select Version from CIM_datafile where name=\''+file+'\''))
while (!files.atEnd()){
WScript.StdOut.WriteLine(files.item().Version);
files.moveNext();
};
WScript.Quit(0)
set EXE='c:\firefox\firefox.exe'
powershell "(Get-Item -path %EXE%).VersionInfo.ProductVersion"
This will give you only the file version:
wmic datafile where name='c:\\windows\\system32\\notepad.exe' get version
Result:
Version
6.1.7601.18917