Пакетный файл, чтобы дождаться завершения установки, прежде чем перейти к следующей строке

У меня есть пакетный файл, который будет определять, установлен ли пользователь .Net framework, перейдя в каталог и проверяя, существует ли каталог CONFIG.

Если каталог не существует, то у пользователя нет установленной инфраструктуры .Net. Затем пакетный файл продолжит установку .Net framework. Тем не менее, существует проблема, так как необходимо установить инфраструктуру .NET, прежде чем запускать установку для установки моего дозвона. Поэтому я поставил инструкцию PAUSE, чтобы пользователь нажал любую кнопку, чтобы продолжить работу после установки рамки.

Однако нашему клиенту это не нравится, так как некоторые из их клиентов не понимают, и они нажимают клавишу до того, как среда завершит установку. Это приводит к сбою установки, поскольку инфраструктура не была установлена ​​в первую очередь.

Я использую ПАУЗА, которая будет ждать ввода пользователя. Однако существует ли способ, которым пакет будет ждать, пока инфраструктура будет завершена автоматически, вместо использования команды PAUSE?

Большое спасибо за любые предложения,

@ECHO OFF
REM Copy the configuration file
copy config.xml "%AppData%\DataLinks.xml"

REM Search for the CONFIG file, if this doesn't exit then the user doesn't have the .Net framework 2.0
SET FileName=%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG
IF EXIST %FileName% GOTO INSTALL_DIALER
ECHO.You currently do not have the Microsoft(c) .NET Framework 2.0 installed.
ECHO.This is required by the setup program for MyApplication.
ECHO.
ECHO.The Microsoft(c) .NET Framework 2.0 will now be installed on you system.
ECHO.After completion setup will continue to install MyApplication on your system.
ECHO.
REM Install the .Net framework and wait for the user to input before install the dialer 
PAUSE
ECHO Installing... Please wait...
SET FileName =
Start .\NetFx20SP2_x86.exe
ECHO Once the .Net Framework has completed. Press any key to continue to install the dialer.
PAUSE
Start .\setup.exe
ECHO ON
EXIT

REM .Net framework has been skipped contine to install the dialer.
:INSTALL_DIALER
ECHO *** Skiped Dotnet Framework 2.0.50727 ***
ECHO Installing... Please wait...
SET FileName=
Start .\setup.exe
ECHO ON
EXIT

Ответы

Ответ 1

вы можете использовать

START /WAIT NetFx20SP2_x86

тоже. помните, что

REM comment

равно

::comment

и что использование.\не нужно, и расширения файлов тоже, если только нет dirs/files с конфликтующими именами. Вам также не нужно дважды очищать переменную "filename" ( "=" ничего не указывая дважды) и

ECHO.something

равно

ECHO something

только за пустые строки

Ответ 2

вы также можете использовать

 START /WAIT NetFx20SP2_x86.exe

косой чертой является указание на то, что это опция для команды запуска, а не для целевого файла. чтобы увидеть больше этих параметров, посмотрите здесь (я бы назвал его "косой чертой" )

Ответ 3

Просто удалите строку START из вызова, например:

.\NetFx20SP2_x86.exe
Start .\setup.exe

Это приведет к блокировке установки, так как в пакетном файле прекратится обработка до завершения программы NetFx20SP2_x86.exe.

Ответ 4

Хорошо, я оптимизировал ваш script, вроде:

@echo off
rem Copy the configuration file
copy config.xml "%AppData%\DataLinks.xml"

rem Search for the CONFIG file, if this doesn't exist then the user doesn't have the .Net framework 2.0
if not exist "%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG" (
    echo You currently do not have the Microsoft(c) .NET Framework 2.0 installed.
    echo This is required by the setup program for MyApplication.
    echo.
    echo The Microsoft(c) .NET Framework 2.0 will now be installed on you system.
    echo After completion setup will continue to install MyApplication on your system.
    echo.
    Start /w .\NetFx20SP2_x86.exe
)
Start /w .\setup.exe

1:. Когда вы используете только файл CONFIG для тестирования один раз, использование переменной для него бесполезно. кроме того, знак "=" должен быть привязан к переменной varablame, иначе вы создадите переменную с пробелом в ней. "set filename =" и "set filename =" - это две разные вещи. Да, имя переменной может содержать несколько слов и пробелов, но нужно очень осторожно относиться к ней, с ней трудно справиться.

2: Я бы не стал комментировать, используя комментарий "::", извините Камило, потому что он не работает в круглых скобках. Он будет здесь, но если вы возьмете этот трек для всех своих партий, вы можете столкнуться с проблемой позже, и вы будете удивляться, почему ваш код сломан, если вы этого не знаете.

3: Вам не нужно завершать script с exit, а не сбросить на эхо на, когда script достигает конца, он выполняет reset состояние эха и выходит сам по себе.

Надеюсь, что это поможет.