web-dev-qa-db-ja.com

Windows:実行可能ファイルのバージョン情報を読み取るコマンドライン?

Windowsには、実行可能(.exe)ファイルのバージョン番号を返すコマンドシェルで実行できる実行可能ファイルがありますか?

さまざまな言語からそれを行う方法を示す多くの質問と、それを書くためのサードパーティソフトウェアへの参照がありますが、それを行うための簡単なシェルコマンドは見つかりません。何もインストールする必要がない場合の追加ポイント。

通常のユーザーとして実行する必要があります。管理者ではありません。

15
neves
wmic datafile where name="C:\\Windows\\System32\\msiexec.exe" get Version /value 

wmicを使用して実行できます。そして、あなたはそれをバッチファイルにラップすることができます

@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

(例)getVersion.cmdおよびgetVersion.cmd "c:\windows\system32\msiexec.exe"

編集済みコメントに適応し、管理者権限を必要としません。この場合、ハイブリッドcmd/javascriptファイルを使用してwmiを照会します。同じ使い方

@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)
24
MC ND

PowerShellを使用して喜んで使用できる場合...

(get-item -Path 'C:\Program Files\Java\jdk1.8.0_144\bin\Java.exe').VersionInfo |
    Format-List -Force

Cmd.exeシェルで実行する必要がある場合は、次を使用できます。

powershell -NoLogo -NoProfile -Command ^
    (get-item -Path 'C:\Program Files\Java\jdk1.8.0_152\bin\Java.exe').VersionInfo ^| ^
        Format-List -Force
10
lit
set EXE='c:\firefox\firefox.exe'
powershell "(Get-Item -path %EXE%).VersionInfo.ProductVersion"
5
bviktor

これにより、ファイルバージョンのみが表示されます。

wmic datafile where name='c:\\windows\\system32\\notepad.exe' get version

結果:

Version
6.1.7601.18917
3
MrCalvin

makecabを使用した1つの方法:

; @echo off
;;goto :end_help
;;setlocal DsiableDelayedExpansion
;;;
;;;
;;; fileinf /l list of full file paths separated with ;
;;; fileinf /f text file with a list of files to be processed ( one on each line )
;;; fileinf /? prints the help
;;;
;;:end_help

; REM Creating a Newline variable (the two blank lines are required!)
; set NLM=^


; set NL=^^^%NLM%%NLM%^%NLM%%NLM%
; if "%~1" equ "/?" type "%~f0" | find ";;;" | find /v "find" && exit /b 0
; if "%~2" equ "" type "%~f0" | find ";;;" | find /v "find" && exit /b 0
; setlocal enableDelayedExpansion
; if "%~1" equ "/l" (
;  set "_files=%~2"
;  echo !_files:;=%NL%!>"%TEMP%\file.paths"
;  set _process_file="%TEMP%\file.paths"
;  goto :get_info
; )

; if "%~1" equ "/f" if exist "%~2" (
;  set _process_file="%~2"
;  goto :get_info
; )

; echo incorect parameters & exit /b 1
; :get_info
; set "file_info="

; makecab /d InfFileName=%TEMP%\file.inf /d "DiskDirectory1=%TEMP%" /f "%~f0"  /f %_process_file% /v0>nul

; for /f "usebackq skip=4 delims=" %%f in ("%TEMP%\file.inf") do (
;  set "file_info=%%f"
;  echo !file_info:,=%nl%!
; )

; endlocal
;endlocal
; del /q /f %TEMP%\file.inf 2>nul
; del /q /f %TEMP%\file.path 2>nul
; exit /b 0

.set DoNotCopyFiles=on
.set DestinationDir=;
.set RptFileName=nul
.set InfFooter=;
.set InfHeader=;
.Set ChecksumWidth=8
.Set InfDiskLineFormat=;
.Set Cabinet=off
.Set Compress=off
.Set GenerateInf=ON
.Set InfDiskHeader=;
.Set InfFileHeader=;
.set InfCabinetHeader=;
.Set InfFileLineFormat=",file:*file*,date:*date*,size:*size*,csum:*csum*,time:*time*,vern:*ver*,vers:*vers*,lang:*lang*"

出力例(wmicメソッドに少し追加された文字列バージョンがあります:)):

c:> fileinfo.bat /l C:\install.exe
    file:install.exe
    date:11/07/07
    size:562688
    csum:380ef239
    time:07:03:18a
    vern:9.0.21022.8
    vers:9.0.21022.8 built by: RTM
    lang:1033

tooltipinfo.bat もご覧ください

3
npocmaka