【发布时间】:2016-04-30 20:59:19
【问题描述】:
我正在编写一个脚本模板来安装多个 MSI,包括错误记录和回滚功能。它包含用于存储每个 MSI 的安装和卸载信息的脚本块。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: Global Variables
SET PACKAGENAME=SysinternalsSuite
SET THISDIR=%~dp0
SET LOGFOLDER=%TEMP%\%PACKAGENAME%
IF EXIST "%LOGFOLDER%" RD "%LOGFOLDER%" /S /Q
MKDIR "%LOGFOLDER%"
SET LOGLEVEL=/lv
:: Scriptblock
SET /A INDEX=0
SET DISPLAYNAME[%I%]=SysinternalsSuite.msi
SET MSIPATH[%I%]="%thisdir%SysinternalsSuite.msi"
SET GUID[%I%]={79D7C0BA-9E50-44E8-8D0B-56D5EA692B5E}
SET ACTIONLOG[%I%]="%LOGFOLDER%\%I%_!DISPLAYNAME[%I%]!.log"
SET INSTALLCOMMAND[%I%]=MsiExec.exe /i !MSIPATH[%I%]! /qn %LOGLEVEL% !ACTIONLOG[%I%]!
SET UNINSTALLCOMMAND[%I%]=MsiExec.exe /x !GUID[%I%]! /qn
SET EXITATERROR[%I%]=1
SET ALLOWEDERROR[%I%]=3010
ECHO !INSTALLCOMMAND[%I%]!
ECHO !UNINSTALLCOMMAND[%I%]!
想法是,只需要定义 DISPLAYNAME、MSIPATH 和 GUID,块的最后 5 行将成为模板的一部分。有没有办法可以在脚本块的最后 5 行使用 marco?我已经尝试过使用 DOSKEY,但这似乎不能批量工作,而且所有的百分号和感叹号都变得棘手。任何建议将不胜感激!
编辑:添加了一些变量和 ECHO 命令,以说明输出应该是什么;有效的 MsiExec 命令行。
【问题讨论】:
-
如果最后五个变量相同,为什么要用索引创建它们?环境变量空间有限制。
-
该值不会相同,但安装命令和卸载命令在其他变量方面的定义相同。换句话说:行将相同,但每个 MSI 块的值最终应该不同。
标签: batch-file cmd macros doskey