這不是試圖回答。這是要求進一步澄清的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>
必須以某種循環,不斷驗證證明爲內胚安裝是否成功的替代。然後可以使用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
-link您可能會看到,你可以用IF
聲明確認條件的數量相當有限。但除批處理if語句(變量比較和文件存在)的基本條件外,如果您可以找到驗證您的條件/證明並正確設置其退出代碼和錯誤級別的命令(在大多數情況下,兩者都相同),你至少可以確定你可以用IF ERRORLEVEL
構造將它變成IF
陳述。
舉一個例子,讓我們考慮一下安裝完成後,您的exe1.exe
安裝程序在密鑰ROOT\SOME\KEY\FOR\EXE1
中創建註冊表EXEC_DIRECTORY
。登記處的存在將成爲你的證據,條件將是「如果登記處存在」。不幸的是,我沒有發現有關批次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
)
我希望這會有所幫助。
好運
你的標題說,兩個文件但後來你說約四...無論如何,你的可執行文件沒有控制檯應用程序,這是這裏的問題,我想...... – aschipfl
我想你也許應該尋找一旦安裝完成,就會實現一些條件:僅在安裝完成時創建的文件/文件夾,證明其安裝正確的寄存器,檢查它安裝的程序是否在已安裝軟件列表中,... 。一旦你找到了這個條件,你可以輪詢它,讓nxt exe只有在滿足條件時才啓動。閱讀安裝程序的幫助信息(如果有的話)或者exe文件可以幫助您找到我認爲的這些條件。這是我不幸的唯一建議。 –
感謝您的建議,可以請給我一個例子@ J.Baoby –