Я пишу шаблон сценария для установки нескольких 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 строк блока будет частью шаблона. Есть ли способ, которым я могу использовать marco для последних 5 строк скриптового блока? Я пробовал с DOSKEY, но это, похоже, не работает в пакетном режиме, и со всеми признаками процента и восклицательными знаками это становится сложным. Любые предложения будут оценены!
EDIT: добавлены некоторые переменные и команды ECHO, чтобы проиллюстрировать, какой должен быть результат; допустимые командные строки MsiExec.
Если последние пять переменных одинаковы, зачем создавать их с помощью индекса? Ограничение на переменное пространство среды. – lit
Значение будет не таким, но команды команды установки и удаления будут иметь одинаковую определение в терминах других переменных. Другими словами: линии будут одинаковыми, но значения должны быть разными для каждого блока MSI. – jnoort