Schtaks - 命令提示符参数

Schtaks - Command Prompt Parameters

我有一个批处理文件,我需要 运行 每 x 分钟。我知道如何设置计划任务,但我不确定是否有参数可以用来利用高级设置 "Stop the existing instance".

基本上,如果由于某种奇怪的原因第一个实例没有完成,我希望能够每 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 的实例,然后终止这些任务。然后命名自己和 运行s 批次。如果它保持打开状态,它会在下次执行任务时被杀死 运行.

您可以将应用程序的 STATUS(即 {START、STOP、运行、...})与其 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

实际上,快速简单地回答我的问题是在 GUI 的任务计划程序中简单地设置任务,当所有参数都设置好后,只需导出 xml 文件。完成后,您只需使用 /xml 选项创建。

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