1

Я могу установить программное обеспечение, установив 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 ответ1

2

Я понятия не имею о ваших прямых вопросах. Но ваш командный файл не может работать как написано.

Вы не можете использовать %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 значение установщика . Я предполагаю, что вы знаете, что делаете, но это выглядит странно для меня.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .