程序版本检查和更新

时间:2014-09-04 18:39:26

标签: batch-file find registry updates

这个网站提供了丰富的信息,我找到了一些很棒的解决方案,但它们都是我需要的所有部分(不按顺序)。 Adobe最近发布了针对Acrobat的安全修复程序,不幸的是它是一个小补丁,并且还需要以前的补丁版本。 详细信息 - 要更新到Acrobat 11.0.08,您必须安装11.0.07。 有些机器有11.0.06及以下。幸运的是,除了安装11的主要版本之外,11.0.07没有任何先决条件。

我需要做的是检查机器是否有11.0.07或11.0.08。如果它没有7或8,则安装7,然后8.如果已安装7,则安装8。如果已安装8,则不执行任何操作。 升级文件位于共享上,需要管理员权限才能安装,因此每台需要更新的计算机都会手动运行。

我一起孵化了以下内容 -

#@echo off
SETLOCAL
cls
rem Installing an update which results in Adobe Reader 11.0.08
echo.
echo.
echo Installing Acrobat Reader 11.0.07 update... please wait...
rem if exist "\\server\share\Logs\%computername%_acrobat_reader_11008.txt" goto gotit
rem Find generates an errorlevel of zero if it encounters a match.
Reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s ^| find  "DisplayName" ^| find "Adobe Acrobat XI Pro" ^| find "DisplayVersion" ^| find "11.0.07"
if %errorlevel% EQU 1 (
goto got7
) ELSE (
goto wrongversion
)
:got7
echo Installing 11.0.08 Update
Reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s ^| find "DisplayName" ^| find "Adobe Acrobat XI Pro" ^| find "DisplayVersion" ^| find "11.0.08"
if %errorlevel% EQU 0 (
goto gotit
) ELSE (
net use q: "\\server\share\Source\patches" /persistent:no 
q:
msiexec /quiet /update Q:\AcrobatSecUpd11008.msp > "\\server\share\Logs\%computername%_acrobat_reader_11008.txt"
goto gotit
)
:wrongversion
Reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s ^|find "DisplayName" ^| find "Adobe Acrobat XI Pro" ^| find "DisplayVersion" ^| find "11.0.08"
if %errorlevel% EQU 0 (
goto gotit
) ELSE (
echo Installing 11.0.07 Update
net use q: "\\server\shareSource\patches" /persistent:no
q:
msiexec /quiet /update Q:\AcrobatUpd11007.msp > "\\server\share\Logs\%computername%_acrobat_reader_11008.txt"
goto got7
)
:gotit
pause

不幸的是,注册表字符串值是分开的。 DisplayName仅显示“Adobe Acrobat XI Pro”,因此显示多个“查找”请求。

1 个答案:

答案 0 :(得分:0)

你的if %errorlevel% EQU 1 (直接与你的rem相矛盾。我认为你的意思是等于0。

但是你不应该使用这个构造,最好使用if errorlevel 1来测试1 或更高

另外,如果您过滤显示名称,则您的下一个过滤器无法从这些结果中找到版本号

这些方面应该有效:

@ECHO off
SETLOCAL enabledelayedexpansion
for /F "usebackq tokens=*" %%a in (`Reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s /f "Adobe Acrobat XI Pro"`) do (
  SET KEY=%%a
  GOTO :next
)
:next
IF NOT "%KEY%" EQU "" (
  FOR /F "usebackq tokens=1,3" %%a in (`Reg query %KEY% /f DisplayVersion`) do (
    IF "%%a" EQU "DisplayVersion" SET VER=%%b
  )
  IF "!VER!" EQU "11.0.07" ECHO found
)