iT邦幫忙

1

使用bat判斷reg是否存在並更改值

  • 分享至 

  • xImage

最近使用神網進行軟體的派送,在執行bat檔上遇到了些問題,目的是更改Adobe的AcrobatReader更新模式。
HKEY_LOCAL_MACHINE.....4-AC0F074E4100}(aacrobat機碼)下MODE的值決定更新模式,因為希望統一版本在安裝時的版號19.0.008.20071,

AcrobatReaderMode
Value Data為 0或1=不下載更新也不安裝、
2=會自動下載更新但由使用者決定安裝與否、
3(預設值)=自動下載更新並自動安裝、
4=當有更新時通知,但不會下載。
預設為3,如果不取消更新會自己升級20098或20065還有一些奇怪的版本。

在軟體按裝完成後自動執行以下bat檔。

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Adobe\Adobe ARM\Legacy\Reader\{AC76BA86-7AD7-1028-7B44-AC0F074E4100}" /v "Mode" /d "0" /t  REG_DWORD /f

目前遇到的狀況是軟體安裝完成後,bat檔會直接啟動,可是這時候Acrobat的登入檔還沒有產生,所以都會失敗。
所以想在bat內加入判斷,Acrobat的登入檔是否已產生,如果沒有就跳回標記重新判斷重複N次直到更改完成。

@echo on
rem 將位置存入regpath
set regpath="HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Adobe\Adobe ARM\Legacy\Reader\{AC76BA86-7AD7-1028-7B44-AC0F074E4100}"

rem 將mode值存入modeX
set modeX=REG query %regpath% /v "Mode"
rem 這邊有問題,不知道怎麼正確地把mode的值存入變數裡

:re
rem 如果mod等於0x0
if %modeX% =="0x0"
rem 這邊不知道在reg_dword這種形態要輸入什麼數 :000000或0或0x0?
(
reg add %regpath% /v "Mode" /d "0" /t REG_DWORD /f
echo "change ok"
goto :end
)
else
(
echo "no found go back"
goto :re
)
:end

rem 加入次數判斷,超過n次goto :end並產生更新失敗log.txt
@pause

想請教上面的兩個問題。
有用過bat呼叫.reg檔但也會發生一樣的狀況。


109/6/16
卡了很久還是沒不知道怎麼正確的將值匯入變數在判斷reg是否存在,最後改用vbs呼叫bat/reg檔來執行,直接在vbs裡面加入sleep等待adobebat的reg生成。
留下一些紀錄參考,在等等看有沒有大神可以解答我的困惑/images/emoticon/emoticon02.gif

以下是copy來的的程式

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
Wscript.Sleep 10000
WinScriptHost.Run Chr(34) & "C:\Temp\Acrobat\run_reg.bat" & Chr(34), 0
Set WinScriptHost = Nothing
slime iT邦大師 1 級 ‧ 2020-05-29 10:58:40 檢舉
A. 公司環境嗎? 對外有防火牆嗎?
如果有的話, 我會考慮從防火牆封鎖Adobe更新主機.

B. 若沒有防火牆或Reg比較合適, 則會往三個方向思考:
1. 安裝完, 先讓軟體執行一次, 再修改Reg.
2. 機碼用多層的方式, 批次檔逐層產生Reg, 避免直接到最後一層卻不存在.
3. 將機碼另外存Reg, 用匯入Reg方式. (剛剛看到原發問者測試此項無效)

C. 查詢機碼是否存在:
reg query HKCU\Software | find /i "adobe"
公司環境有防火牆 沒想到這方法 可以試試看
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答