任务计划程序停止后,批处理文件继续运行命令

任务计划程序停止后,批处理文件继续运行命令

我有一个正在运行的计划任务,00:00它会打开一个.bat包含命令的文件robocopy,并将任务设置为在 4 分钟后停止,并且如果在请求时未结束则强制停止。

似乎任务计划程序停止命令会被忽略,直到robocopy命令完成为止,在我看来这违背了要点 - 有没有办法解决这个问题?

  • 我期望的消息在 的历史记录中00:04,但是 的输出文件robocopy继续运行了 4 分钟,只在 处停止00:08

    任务计划程序因超出任务定义中配置的分配执行时间而终止了任务 {uuid} 实例。用户操作:增加配置的任务超时或调查延迟的外部原因。Taskname

  • 文件中还有其他命令.bat,但该robocopy步骤是在调度程序尝试停止任务时运行的命令,其后的命令未运行:
     MkDir "C:\Destination\Folder"
       RoboCopy "C:\Source\Folder" "C:\Destination\Folder" /MOV /IS /S /R:0 /LOG:"C:\output.txt"
       RmDir "C:\Destination\Folder" /s /q
    

答案1

@JW0914 说得对:

我认为这是正常行为,因为任务和脚本是两个独立的实体 - 虽然任务启动脚本,但脚本不是任务,因此它应该独立于任务本身运行完成(至少这是我RoboCopy在任务计划程序中启动脚本的经验). 需要参考任务计划程序的 Microsoft Docs(如果我没记错的话,任务本身会从事件查看器中的事件中完成脚本或出现错误,尽管我可能记错了)

这里我们可以解决这个问题,因为这是一个robocopy没有批处理语法的普通命令,通过使用创建基本任务无需创建批处理文件:

  1. 打开任务计划程序 → 创建 → 创建基本任务
  2. 命名任务并设置描述
  3. 设置触发器
  4. 选择时间
  5. 操作→运行程序:
    • 程序/脚本:C:\Windows\System32\robocopy.exe
    • 参数:
      "C:\Source\Folder" "C:\Destination\Folder" /MOV /IS /S /R:0 /log:"C:\output.txt"
      
  6. 结束

答案2

需要一些帮助来编写一个简单的脚本。

需要触发一个进程,当 CPU 低于 12% 并运行 5 分钟时终止该进程。有什么想法吗

$处理器 = (获取进程).CPU

$processes_to_kill = 获取进程 Omnis* |

Where-Object {$_.$process.cpu -le 12 -and {($_.process.starttime).TotalSeconds -gt 300} }

如果 ($processes_to_kill -ne $null)

{

$processes_to_kill | ForEach-Object { $_.Kill() }

}

相关内容