2014-09-04 88 views
1

本網站是豐富的信息,我找到了一些很好的解決方案,但它們都是我需要的部分(按順序)。 Adob​​e最近爲Acrobat發佈了一個安全修復程序,不幸的是它是一個小補丁,並且還需要以前的修補程序版本。 詳細信息 - 要更新到Acrobat 11.0.08,您必須安裝11.0.07。有些機器有11.0.06及以下。幸運的是,11.0.07除了安裝11版的主要版本之外沒有任何先決條件。程序版本檢查和更新

我需要做的是檢查機器是否有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」,因此有多個「查找」請求。

+0

如此 - 有沒有問題?看來你已經有了一個解決方案。 – ths 2014-09-05 13:33:58

+0

它似乎不能正常工作。忽略一些陳述。我已經在08版本的電腦上測試過了,但它仍然會安裝。 – MattG78 2014-09-05 14:31:42

+0

您的多個查找語句不以您想象的方式工作。帶有displayname的第一個查找將輸出文本,如「Adobe Acrobat XI Pro」,並在Adobe Acrobat XI Pro上找到第二個查找過濾器。最後的發現只有'Adobe Acrobat XI Pro'行作爲輸入。其他所有內容都被前面的find命令過濾掉了。 – foxidrive 2014-09-06 05:27:38

回答

0

您的if %errorlevel% EQU 1 (直接與您的rem找到回報相矛盾。我認爲你的意思是equ 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 
) 
+0

謝謝你的發言,我會試一試並回報。 – MattG78 2014-09-08 11:55:03

+0

我很抱歉,但我無法將其注入到當前批次中。 – MattG78 2014-09-09 14:10:08

+0

沒關係,不需要道歉。 – ths 2014-09-09 19:38:44

相關問題