Instalação autônoma de vários programas por meio de arquivo em lotes

1

Eu posso instalar o software definindo auto=1 em install.inf e, em seguida, use o seguinte script:

@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 

arquivo de configuração 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>

A instalação funciona, no entanto, eu quero instalá-lo em um diretório de destino específico. Como posso fazer isso?

Além disso, quando uso switches como:

start /w %setup% /norestart /silent

ou

%setup% /passive /norestart 

Eu recebo o seguinte erro:

The setup information file was not found. you need to unpack the whole archive before running the install.exe. installation aborted

Como isso pode ser corrigido?

    
por Pari 04.09.2013 / 10:34

1 resposta

2

Não tenho ideia sobre suas perguntas diretas. Mas o seu arquivo de lote não pode funcionar como está escrito.

Você não pode usar %setup% no mesmo bloco de código (loop FOR) que define o valor porque o bloco inteiro é analisado em uma passagem e o valor é expandido antes que a análise ocorra. O valor é definido corretamente, mas o valor expandido será o valor que existia antes de você entrar no loop.

Na primeira vez que você executa o script em lote, a variável setup ainda não está definida, por isso, ela falha completamente. O valor é definido, mas seu loop não pode vê-lo. Seu script não tem setlocal , portanto, o último valor que foi definido é preservado quando o script é encerrado. Na próxima vez que você executar seu script, ele usará o valor preservado da última execução em cada linha do arquivo XML.

Acredito que você consiga corrigir esse problema específico substituindo call %%setup%% por %setup% .

EDITAR

Ou melhor ainda, simplesmente elimine totalmente a variável setup e use %%i diretamente:

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

Observação - não entendo de onde o valor installer está vindo. Estou assumindo que você sabe o que está fazendo, mas parece estranho para mim.

    
por 04.09.2013 / 14:07