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

时间:2017-12-19 04:52:19

标签: windows batch-file

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

我的问题是这个 - 我实际在我想要等待的批处理文件中启动的程序又启动另一个程序,然后启动另一个程序。这可能没有任何意义 - 但它是因为它是一个游戏发射器。这是最终幻想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进程在登录之后才开始。

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

感谢您的帮助!

2 个答案:

答案 0 :(得分: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

试试这个

答案 1 :(得分: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以停止它。