我正在尝试使用批处理文件一个接一个地安装四个exe

时间:2017-04-17 21:00:48

标签: batch-file

有批处理文件我正在尝试安装四个exe的exe1.exe,exe2.exe,exe3.exe和exe4.exe我使用以下命令安装它们

@echo  off
echo %time%
timeout 1

start /wait /b "C\Softwares\exe1.exe" /t |more
start /wait /b "C\Softwares\exe2.exe" /t |more
start /wait /b "C\Softwares\exe3.exe" /t |more
start /wait /b "C\Softwares\exe4.exe" /t |more

echo %time%

使用上面的脚本我正在完成任务,但是所有4个exe的设置向导一次打开。我想在exe1.exe安装完成后打开exe2.exe安装向导,对于剩下的exe也一样。

在等待任何人回复的问题上需要帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

这不是尝试回答。这是要求进一步澄清的the comment of the OP的答案。这里解释的部分可能会导致答案。

所以我的意思基本上是这样的:

start /wait /b "C\Softwares\exe1.exe" /t |more
< WAIT HERE ON CONDITION FOR exe1 >

start /wait /b "C\Softwares\exe2.exe" /t |more
< WAIT HERE ON CONDITION FOR exe2 >

start /wait /b "C\Softwares\exe3.exe" /t |more
< WAIT HERE ON CONDITION FOR exe3 >

start /wait /b "C\Softwares\exe4.exe" /t |more

每个< WAIT HERE ON CONDITION FOR exeN>必须用某种循环替换,以便继续验证exeN安装成功(或失败?)的证据。然后可以使用IF语句将该证明批量转换为条件,并且可以使用goto完成循环。

:WaitLoopExeN
IF NOT <condition_exe_N> (
    REM Use a timeout to wait before verifying again, else it may take too much resources
    timeout 5 > nul
    goto :WaitLoopExeN
)

正如您所看到的,如果您按照IF - 链接进行操作,您可以使用IF语句验证的条件数量非常有限。但除了批量if语句的基本条件(变量比较和文件存在)之外,如果你能找到一个验证你的条件/证据的命令并正确设置它的退出代码和错误级别(在大多数情况下两者都是相同的) ),您至少可以确定可以使用IF构造将其转换为IF ERRORLEVEL语句。

作为示例,让我们考虑一下,当安装完成时,您的exe1.exe安装程序会在密钥EXEC_DIRECTORY中创建一个注册表ROOT\SOME\KEY\FOR\EXE1。注册表的存在将是您的证明,条件将是“如果注册表存在”。不幸的是,我所知道的批处理IF声明没有直接验证。但是存在查询注册表的命令:REG QUERY。因此,以下内容应该能够替换< WAIT HERE ON CONDITION FOR exe1 >

:WaitLoopExe1
REM Query the registry, will set errorlevel on 1 or greater if it didn't succeed
REG QUERY ROOT\SOME\KEY\FOR\EXE1 /v EXEC_DIRECTORY > nul
REM Now verify errorlevel
IF ERRORLEVEL 1 (
    timeout 5 > nul
    goto :WaitLoopExe1
)

另一方面,如果文件/目录的存在是exe1.exe安装成功的证明,那就是:

:WaitLoopExe1
REM Verify if file exists, if not enter inside the parenthesis
IF NOT EXIST "path\to\file\that\proofs\success" (
    timeout 5 > nul
    goto :WaitLoopExe1
)

我希望这会有所帮助 祝你好运