我有一个批处理文件,我需要运行x
分钟。我知道如何设置计划任务,但我不确定是否有可用于利用高级设置的参数“停止现有实例”。
基本上,我希望能够每隔x
分钟运行批处理文件,当它再次运行时,如果由于某些奇怪的原因第一个实例没有完成,我需要它被杀死并且新的实例跑步。
现在,我正在使用:
schtasks /create /tn [TASKNAME] /tr C:\[DIR]\au.bat /sc MINUTE /mo 15 /ru "System"
这很棒,但缺少这个额外的部分。
我已经知道GUI是一个选项,但我使用命令提示符的原因是它包含在客户端将使用的安装程序中为他们提供方便,我不希望他们必须采取这个进入GUI进行此更改的最后一步。
修改 结束这样的事情:
REM Checks to see if any instances of 'MYTITLE'
FOR /F "tokens=* USEBACKQ" %%F IN (`tasklist /v /fo csv ^| findstr /i MYTITLE`) DO (
FOR /F "tokens=2 delims=," %%B IN (%%F) DO (
taskkill /pid %%B /f
)
)
title=MYTITLE
[BATCH FILE DOES STUFF HERE]
在启动时,它会查看是否有任何匹配MYTITLE
的实例然后杀死这些任务。然后命名自己并运行批处理。如果它保持打开状态,它将在下次运行任务时被终止。
答案 0 :(得分:1)
实际上,我的问题的快速简单回答是在GUI中的任务计划程序中设置任务,并且在设置所有参数后,只需导出xml文件。完成此操作后,您只需使用/xml
选项进行创建。
schtasks /create /tn [TASKNAME] /XML C:\[DIR]\schedule.xml
答案 1 :(得分:0)
您可以将应用程序的STATUS
(即{START,STOP,RUNNING,...})及其PID
存储在环境变量中。
例如(环境变量):
MY_APP_STATUS = 1
MY_APP_PID = 1234
获取PID,请参阅:
getting process ID of exe running in Bat File,
how to get own process pid from the command prompt in windows
在批处理脚本中,如果使用PID
设置环境变量,则可以终止正在运行的批处理。
您可以使用taskkill
命令执行此操作:
taskkill /pid 1234 /f
您需要在终止现有正在运行的批处理后重置STATUS
标志,并使用新的运行实例更新PID
。