Windows a-t-il un exécutable que je peux exécuter dans la commande Shell qui renvoie le numéro de version d'un fichier exécutable (.exe)?
Je vois beaucoup de questions qui montrent comment le faire à partir de différentes langues et des références à des logiciels tiers pour l'écrire, mais je ne trouve pas de commande Shell simple pour le faire. Points supplémentaires si je n'ai pas besoin d'installer quoi que ce soit.
Il doit être exécuté en tant qu'utilisateur normal. Pas administrateur.
wmic datafile where name="C:\\Windows\\System32\\msiexec.exe" get Version /value
Vous pouvez utiliser wmic
pour le faire. Et vous pouvez l'envelopper dans un fichier batch
@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
Enregistrez-le sous (exemple) getVersion.cmd
et appelez comme getVersion.cmd "c:\windows\system32\msiexec.exe"
édité pour s'adapter aux commentaires et ne pas nécessiter de droits d'administrateur. Dans ce cas, un fichier hybride cmd/javascript est utilisé pour interroger wmi. Même 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)
Si vous souhaitez et pouvez utiliser PowerShell ...
(get-item -Path 'C:\Program Files\Java\jdk1.8.0_144\bin\Java.exe').VersionInfo |
Format-List -Force
Si vous devez l'exécuter dans un shell cmd.exe, vous pouvez utiliser:
powershell -NoLogo -NoProfile -Command ^
(get-item -Path 'C:\Program Files\Java\jdk1.8.0_152\bin\Java.exe').VersionInfo ^| ^
Format-List -Force
set EXE='c:\firefox\firefox.exe'
powershell "(Get-Item -path %EXE%).VersionInfo.ProductVersion"
Cela vous donnera uniquement la version du fichier:
wmic datafile where name='c:\\windows\\system32\\notepad.exe' get version
Résultat:
Version
6.1.7601.18917
et à sens unique avec makecab
:
; @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*"
exemple de sortie (il a une version chaîne qui est un petit ajout à la méthode 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
vous pouvez également jeter un œil à tooltipinfo.bat