1

我试图让我的安装批处理文件仅在我正在安装的当前版本比本地计算机上安装的版本更新时运行(如果已安装)。我一直在环顾四周,似乎常见的方法是写入注册表,然后通过检查它是否存在以及值来使用该条目来关闭未来。

我在这个站点上找到了这个FOR 语句,它将检查注册表项是否等于特定值,但我希望查询能够确定注册表值是否小于指定值。HKLM......\Installed_Reg_Key 值(即 4.5)是否小于 5.0。如果我必须有两个 IF 语句,一个检查密钥是否存在(如果当前未安装),另一个检查它是否小于我正在推动的,这很好。如果我必须编写特定类型的 reg 密钥,我可以不在乎。

谢谢,布赖恩

4

1 回答 1

1

请参阅下面的代码 -

您只需要一个 FOR 语句来测试 - 因为它将填充一个环境变量。如果变量不存在,则程序未安装,您 :CALL 执行适当的操作。

下面的代码:

  1. 在注册表中查询 HKLM\software\Batchver\batchver 中的值
  2. 将其分配给环境变量。
  3. 测试分配是否成功。如果分配失败(即注册表项中没有数据),调用安装例程。
  4. 另外三个语句测试环境变量的值,并且每次都采取行动。
  5. 所有子例程都包含一个将注册表更新为当前版本号的例程。

@echo off SETLOCAL ENABLEEXTENSIONS SETLOCAL ENABLEDELAYEDEXPANSION set 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
于 2013-11-04T22:58:24.540 回答