Хотя это старый вопрос, я постараюсь ответить на него, поскольку он может быть полезен для других. Командная оболочка Windows не имеет прямого способа получить метаданные файлов, например, но вы можете использовать wmic для нее. Основная проблема заключается в том, что отображаемое имя программного обеспечения может отличаться в свойствах файла exe-файла установки/обновления, а также от имени в реестре. Таким образом, это плохая идея, чтобы взять имя из метаданных файла и запросить его в целом в куче реестра HKLM. Кроме того, если у вас нет предопределенного списка программного обеспечения для обновления и не знаю точного пути в реестре, где хранится версия для каждого из них, идея зацикливаться на списке exe, чтобы получить имена от их Идентификатор метаданных также плохой.
Итак, лучший способ поиска - это сделать скрипт для каждого exe отдельно и добавить их в планировщик Windows. Вот пример необходимого пакетного сценария для автоматизации обновления для Adobe Flash Player для 64-битной ОС:
@echo off
for /f %%a in ('wmic datafile where name^="C:\\Users\\username\\Downloads\\install_flash_player_19_active_x.exe" get version ^| find /n /v "" ^| findstr "^\[2\]"') do set var=%%a
for /f "tokens=2 delims=]" %%a in ("%var%") do set prver=%%a
echo Available version: %prver%
for /f "tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{EE56217C-B3F9-402B-B4EC-63F090F51D3D}" /v DisplayVersion') do set regversion=%%a
echo Installed version: %regversion%
if %prver% == %regversion% (echo The newest version %regversion% installed) else (echo Update required & "C:\Users\username\Downloads\install_flash_player_19_active_x.exe")
файл обновления находится в некоторой локальной папке, в моем случае C: \ Users \ имя пользователя \ Загрузка \ install_flash_player_19_active_x.exe. Когда программы установлены, они регистрируются в HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ для 64-разрядной ОС и HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ для 32-разрядных.
Следовательно, вам необходимо найти путь для каждой установки, в которой вы нуждаетесь. Обратите внимание, что {EE56217C-B3F9-402B-B4EC-63F090F51D3D} в моем сценарии является GUID для данной версии Flash Player 19.
Вот то же самое в PowerShell, которая является более элегантна:
$filever = (Get-Item "C:\Users\username\Downloads\install_flash_player_19_active_x.exe").versioninfo.fileversion
$appname = (Get-Item "C:\Users\username\Downloads\install_flash_player_19_active_x.exe").versioninfo.internalname
$regpath = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{EE56217C-B3F9-402B-B4EC-63F090F51D3D}"
$regversion = Get-ItemProperty $regpath -Name "DisplayVersion" | select -ExpandProperty "DisplayVersion"
if ($winrarreg -eq $regversion) {
"The newest version of Flash Player $regpath is already installed"
} else {
"Current installed version is:" + $regversion
"Available version is:" + $filever
"Let's update Flash Player"
Start-Process -FilePath "C:\Users\username\Downloads\install_flash_player_19_active_x.exe"
}