我必须在指定目录内的所有子目录中找到卸载程序。找到卸载程序后,我需要运行它。
@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社区的更多建议。
答案 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中的所有匹配文件,第二个只会打开下一个记事本,当你关闭前一个时。