Как я могу получить свойства файла приложения из командной строки - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь получить свойства файла .exe.

Если я использую wmic datafile where name="${localPath}" get Version, я могу получить версию приложения.

Однако я хочу получить поле product version из свойств и не могу получить его непосредственно из командной строки. Все, что WMIC может дать мне:
AccessMask, Архив, Заголовок, Сжатый, CompressionMethod, CreationClassName, CreationDate, CSCreationClassName, CSName, Описание, Диск, EightDotThreeFileName, Зашифрованный, EncryptionMethod, Расширение, FileNameTameFameSpaceFize, FileSize, размер файла, Скрытый, InstallDate, InUseCount, LastAccessed, LastModified, Производитель, Имя, Путь, Чтение, Состояние, Система, Версия и Запись.

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Я прекратил использование powershell: powershell.exe Get-ItemProperty myApplication.exe -Name VersionInfo

Затем я смог проанализировать вывод вызова в узле.

0 голосов
/ 13 октября 2019

Вы можете получить версию продукта с powershell и WMIC в одном пакетном файле.

Просто скопируйте и сохраните этот код как Get_Application_Version.bat

@Echo Off
Mode 80,10 & color 0A
Title Version With PowerShell
::https://stackoverflow.com/questions/49603697/windows-powershell-get-program-version-into-variable/49607234#49607234
Set "AppFullPath=%Windir%\notepad.exe"
For /F "Delims=" %%A In ('Powershell -C "(GI '%AppFullPath%').VersionInfo.ProductVersion"') Do Set "PV=%%A"
Echo Version of this Application "%AppFullPath%"=%PV%
Pause
Title Get File Version of any Application using WMIC
Rem WMIC
Set "Version="
Set "AppFullPath=%Windir%\notepad.exe"
Call :Get_AppName "%AppFullPath%" AppName
Call :Add_backSlash "%AppFullPath%"
Call :GetVersion %Application% Version
If defined Version (
    echo Vesrion of %AppName% ==^> %Version%
)
pause>nul & Exit
::*******************************************************************
:Get_AppName <FullPath> <AppName>
Rem %1 = FullPath
Rem %2 = AppName
for %%i in (%1) do set "%2=%%~nxi"
exit /b
::*******************************************************************
:Add_backSlash <String>
Rem Subroutine to replace the simple "\" by a double "\\" into a String
Set "Application=%1"
Set "String=\"
Set "NewString=\\"
Call Set "Application=%%Application:%String%=%NewString%%%"
Exit /b
::*******************************************************************
:GetVersion <ApplicationPath> <Version>
Rem The argument %~1 represent the full path of the application
Rem without the double quotes
Rem The argument %2 represent the variable to be set (in our case %2=Version)
FOR /F "tokens=2 delims==" %%I IN (
 'wmic datafile where "name='%~1'" get version /format:Textvaluelist 2^>^nul'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "%2=%%A"
Exit /b
::*******************************************************************
...