通过批处理文件无人值守安装多个程序

通过批处理文件无人值守安装多个程序

auto=1我可以通过设置来安装该软件install.inf,然后使用以下脚本:

@echo off
for /F "tokens=2 delims=<>" %%i in ('type test.xml ^|find "<install>"') do (
set setup=%%i 
echo installing %installer% >>log.txt
%setup% 
)
@echo on 

XML 配置文件(test.xml):

<?xml version="1.0" encoding="UTF-16"?>

<install>C:\Users\UIDW6331\Desktop\tcm801x64\INSTALL.EXE</install>
<install>C:\Users\UIDW6331\Desktop\tcm801x64\INSTALL.EXE</install>

安装成功了,但是我想将其安装在特定的目标目录中。我该怎么做?

另外,当我使用如下开关时:

start /w %setup% /norestart /silent

或者

%setup% /passive /norestart 

我收到以下错误:

未找到安装信息文件。您需要在运行 install.exe 之前解压整个存档。安装已中止

如何修复此问题?

答案1

我不知道您直接问的问题。但是您的批处理文件无法按写的那样工作。

您不能%setup%在设置值的同一代码块(FOR 循环)中使用,因为整个块在一次传递中解析,并且值在解析之前会扩展。值会正确设置,但扩展的值将是您进入循环之前存在的值。

第一次运行批处理脚本时,setup变量尚未定义,因此完全失败。值已设置,但循环无法看到它。脚本没有setlocal,因此脚本终止时会保留设置的最后一个值。下次运行脚本时,它将使用 XML 文件每一行上上次运行时保留的值。

我相信您可以通过替换call %%setup%%来解决这个特殊问题%setup%

编辑

或者更好的是,简单地setup完全消除变量并%%i直接使用:

for /F "tokens=2 delims=<>" %%i in ('type test.xml ^|find "<install>"') do (
  echo installing %installer% >>log.txt
  %%i
)

注意 - 我不明白这个installer值从何而来。我假设你知道自己在做什么,但我觉得这看起来很奇怪。

相关内容