我正在编写一个脚本模板来安装多个 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 命令行。