有批处理文件我正在尝试安装四个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也一样。
在等待任何人回复的问题上需要帮助。提前谢谢。
答案 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
)
我希望这会有所帮助 祝你好运