等到一个程序完成,然后在Windows脚本中启动下一个程序

时间:2018-03-20 13:12:17

标签: windows powershell batch-file cmd windows-7

我必须在指定目录内的所有子目录中找到卸载程序。找到卸载程序后,我需要运行它。

@setlocal enabledelayedexpansion
@for /r %%i in ( un*.exe) do (
        @echo Found file: %%~nxi            

        %%i             
        )

我已经能够使用上面的代码搜索子目录并在其中找到卸载程序。

问题:命令%%i执行uninstaller.exe,控件立即返回命令提示符。由于控制立即返回到命令提示符,因此执行下一次for-loop迭代,因此也会启动下一个卸载程序(通过命令%%i)。

我需要什么:我希望保留当前for-loop的迭代,直到命令%%i启动的卸载程序完成。

PS:卸载程序本身无法完成。他们要求几个选项,因此,我想逐个启动它们(这样用户就不会感到困惑)。

PS-2:正如下面的一条评论所指出的那样,PowerShell可以解决这个问题,我也在寻找PowerShell社区的更多建议。

2 个答案:

答案 0 :(得分:1)

假设您要1)在特定路径及其子目录中找到名为un*.exe的所有文件,2)执行每个文件,并且3)等待每个可执行文件在执行下一个之前完成,您可以编写在PowerShell中这样的事情:

Get-ChildItem "C:\Uninstaller Path\un*.exe" -Recurse | ForEach-Object {
  Start-Process $_ -Wait
}

答案 1 :(得分:0)

您可以使用start /wait。比较以下两行:

for %%i in (*.txt) do notepad "%%i"

for %%i in (*.txt) do start /wait notepad "%%i"

第一个将打开几个Notepad中的所有匹配文件,第二个只会打开下一个记事本,当你关闭前一个时。