Windows批处理文件 - 如何在批处理文件中未启动的程序关闭后执行命令

问题描述 投票:0回答:2

我很难找到这个问题的答案。我只是在程序终止后才专门在批处理文件中执行命令 - 但是,批处理文件没有启动的程序。

我的问题是这个 - 我实际在我想要等待的批处理文件中启动的程序反过来启动另一个程序,然后启动另一个程序。这可能没有任何意义 - 但这是因为它是一个游戏发射器。这是最终幻想XIV。启动它的正常程序是ffxivboot.exe,后者又启动ffxivlauncher.exe。这是一个登录窗口,一旦您登录,它就会启动ffxiv_dx11.exe。因此,虽然我最初写它等待ffxivboot.exe,但该进程不会继续运行,所以我无法等待它。

这是我的文件(为简单起见排除了路径):

taskkill /im someprogram.exe
ffxivboot.exe
timeout /t 60 /nobreak

### ??? need to wait on ffxiv_dx11.exe to close before executing next command

someprogram.exe

我添加了一个等待的计时器,以便它给我足够的时间登录 - 因为ffxiv_dx11.exe进程直到登录后才开始。

我正在尝试做什么?很难找到答案,因为我只得到关于你何时等待从批处理文件开始的任务结束的结果。但就像我说的那样,那个启动另一个又启动另一个 - 所以原来的流程不再运行了。

谢谢你的帮助!

windows batch-file
2个回答
1
投票
taskkill /im someprogram.exe
ffxivboot.exe
timeout /t 60 /nobreak

:repeat
::### ??? need to wait on ffxiv_dx11.exe to close before executing next command
tasklist /fi "imagename eq ffxiv_dx11.exe"|find /i "=========================" >nul 2>nul &&(
   w32tm /stripchart /computer:localhost /period:10 /dataonly /samples:2  1>nul
   goto :repeat
)

someprogram.exe

试试这个


0
投票
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM Win32_ProcessStopTrace")

Do
    Set objReceivedEvent = objEvents.NextEvent
    msgbox objReceivedEvent.ProcessName
    If lcase(objReceivedEvent.ProcessName) = lcase("Notepad.exe") then 
        Msgbox "Process exited with exit code " & objReceivedEvent.ExitStatus
        WshShell.Run "c:\Windows\notepad.exe", 1, false
    End If
Loop

这是一个需要运行提升的vbs文件。它等待任何程序退出并检查它是否是记事本并重新启动它。

键入一个提升的命令提示符taskkill /f /I'm wscript.exe来阻止它。

© www.soinside.com 2019 - 2024. All rights reserved.