2013-11-04 171 views
1

我想讓我的安裝批處理文件只運行,如果我正在安裝的當前版本比在本地計算機上安裝的版本更新(如果安裝的話) 。我一直在環顧四周,似乎常用的方法是寫入註冊表,然後使用該條目關閉未來,通過檢查是否存在以及值。批處理文件命令查詢註冊表項的數值

我在這個網站上發現了這個FOR statement這將檢查註冊表項是否等於一個特定的值,但我希望查詢能夠確定註冊表值是否小於指定值。是HKLM ...... \ Installed_Reg_Key值(4.5)小於5.0。如果我必須有兩條IF語句,一個檢查鍵是否在那裏(如果它當前沒有安裝),另一個檢查是否它小於我推,那沒什麼。如果我必須寫一個特定類型的註冊碼,我可以不在乎。

感謝, 布賴恩下面

+0

如果你像YYYYMMDD格式填充日期一鍵,然後它是一個非常簡單的命令比較大於或小於。如果您可能每天釋放多次,則將HH小時添加到上面字符串的末尾。 – foxidrive

回答

1

見代碼 -

你只需要一個單一的FOR語句來測試 - 因爲這將填充的環境變量。如果該變量不存在,那麼該程序未安裝,並且您:調用適當的操作。

下面的代碼:

  1. 查詢,以\ Batchver \ batchver在HKLM \軟件的價值
  2. 它分配給一個環境變量註冊表。
  3. 測試賦值是否成功。如果分配失敗(即註冊表項中沒有數據),請調用安裝例程。
  4. 另外三個語句測試環境變量的值,並且每次都採取行動。
  5. 所有子例程都包含一個例程,用於將註冊表更新爲當前版本號。

關閉@echo SETLOCAL ENABLEEXTENSIONS SETLOCAL ENABLEDELAYEDEXPANSION 集batchver =

for /f "tokens=3 skip=3" %%i in ('reg query HKLM\Software\batchver /v batchver') do @set batchver=%%i 


if .batchver==. call :new_install 

:: if already installed do nothing. 

if batchver==5.0 @echo Up to date! && goto :exit 

if batchver leq 4.5 call :reinstall 

if batchver gte 4.6 call :patch 



goto :exit 


:new_install 

    <new installation routines here.> 
    ::update registry with new version 
    reg add HKLM\software\batchver /v batchver /d 5.0 /f 


goto :eof 

:reinstall 
    <reinstall routine here> 
::update registry with new version 
    reg add HKLM\software\batchver /v batchver /d 5.0 /f 
goto :eof 

:patch 
    <patch routines here> 
::update registry with new version 
    reg add HKLM\software\batchver /v batchver /d 5.0 /f 
goto :eof 

:exit 
+0

由於期限的限制,您的比較將在本質上是ascii而不是數值。 – foxidrive

+0

這是正確的。但是,事實證明4.6在ascii比較中仍然大於4.5。 – RobW

+0

謝謝,我會在接下來的幾天裏嘗試一下我有一段時間。如果我想將查找擴展到3位以上(4.55或4.5.5),我是否需要將「tokens = 3 skip = 3」更改爲4或5? – Brian

相關問題