Windows Schtaks-命令提示参数

Windows Schtaks-命令提示参数,windows,cmd,windows-task-scheduler,Windows,Cmd,Windows Task Scheduler,我有一个批处理文件需要运行x分钟。我知道如何设置计划任务,但不确定是否有参数可用于利用高级设置“停止现有实例” 基本上,我希望能够每x分钟运行一次批处理文件,当它再次运行时,如果出于某种奇怪的原因第一个实例没有完成,我需要终止它并运行新实例 现在,我正在使用: schtasks /create /tn [TASKNAME] /tr C:\[DIR]\au.bat /sc MINUTE /mo 15 /ru "System" 这很好,但它缺少这个额外的部分 我已经知道GUI是一个选项,但我之所以

我有一个批处理文件需要运行
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
匹配的实例,然后终止这些任务。然后命名自己并运行批处理。如果它保持打开状态,它将在下次运行任务时被终止。

您可以在环境变量中存储应用程序的
状态(即{START,STOP,RUNNING,…}),以及它的
PID

例如(环境变量):

我的应用程序状态=1
我的应用程序PID=1234

有关获取PID的信息,请参见:
,

在批处理脚本中,如果使用
PID
设置环境变量,则可以终止正在运行的批处理

您可以使用
taskkill
命令执行此操作:

taskkill /pid 1234 /f

在终止现有正在运行的批处理后,您需要重置
状态
标志,并使用新的运行实例更新
PID

实际上,我的问题的简单快捷的答案是在GUI中的task Scheduler中设置任务,设置完所有参数后,只需导出xml文件。完成后,只需使用
/xml
选项创建


schtasks/create/tn[TASKNAME]/XML C:\[DIR]\schedule.XML

这对我不起作用的原因是我没有使用批处理文件来运行任何应用程序。我用它来检查windows服务的当前状态,然后在它们关闭时启动它们。批处理文件将从cmd.exe运行,因此此方法没有帮助。它不是您的批处理?你不能把这个逻辑加进去吗?我用你的答案想出了解决我问题的办法。虽然最终我没有让你的解决方案在我的案例中起作用,但我还是根据这里所说的从兔子洞里钻出来的东西想出了一些办法。我的答案见上文。@theharlotfelon:我很高兴它在你的场景中有一些用处。:)您是否愿意透露一下您使用此解决方案中的一些部分实际做了些什么来解决您的问题?我编辑了我最初的问题,以展示我所做的。但我在测试中遇到了另一个问题。。。这里的问题是,虽然这可以正常运行批处理,但当与Task Scheduler一起使用时,它只会看到任务正在运行,而不是打开一个新实例并关闭最后一个实例,它不会打开,因为任务的默认设置是什么都不做。我知道,在这些情况下,我可以轻松地更改GUI中的选项以关闭以前的实例,但我更愿意自动化该过程,此时可能需要查看其他选项。