Windows Task Scheduler无法启动批处理文件任务

Windows Task Scheduler doesn't start batch file task

我有一个包含以下代码的批处理文件,以停止和启动SQL Report Service:

1
2
3
4
5
net stop"SQL Server Reporting Services (MSSQLSERVER)"

timeout /t 10

net start"SQL Server Reporting Services (MSSQLSERVER)"

我已将计划任务设置为每天运行,它当前以具有最高特权集的SYSTEM身份运行。 我已经在操作中设置了"在文件夹中启动"选项,并且通常一切似乎都已正确设置。 但是,当我运行任务时,似乎没有任何反应,它表示任务已运行,但我看不到该服务已按预期重新启动。

有人可以将我引导到我所缺少的地方吗? 谢谢


确保正确设置"开始于"和"程序/脚本"选项。如果您的文件地址是:C: Temp foo.bat,请将"开始于"选项设置为" C: Temp",并将"程序/脚本"选项设置为" foo.bat"。

设置"开始于"选项:在任务计划程序> Properties > Actions > Edit.中右键单击任务

如果仅此操作不起作用,则尝试将.bat文件移动到具有基本权限的目录(例如,可能是共享目录)。

我的.bat文件位于具有某些限制性权限的文件夹中,因此只有我的用户帐户才能访问它。即使我已设置任务计划程序以使用我的凭据,它仍然失败。将.bat文件移动到另一个目录解决了该问题。


在这个愚蠢的问题上浪费了很多时间!

将cd命令添加到批处理文件位于批处理文件第一行的位置,然后查看它是否可以解决问题。

1
cd D:\wherever\yourBatch\fileIs

提示:请使用绝对路径,理想情况下,相对路径不应该成为问题,但是调度程序很难理解它们。


这是一个很旧的线程,但问题仍然相同-

我尝试了多种方法,但均无效果-

  • 添加了起始路径(不带引号)
  • 在程序/脚本中删除了批处理文件的完整路径
    领域等
  • 在程序中添加了C:\Windows\system32\cmd.exe,在参数字段中添加了/c
    myscript.bat
  • 这就是对我有用的-

    程序/脚本字段-cmd

    添加参数-/ c myscript.bat

    开始于:myscript.bat的路径


    我有同样的问题。我相信这是一个特权问题。如果选择了"仅在用户登录时运行",则不会发生。

    希望您现在已经弄清楚了,但是我想在这里注册,以供下一个在此上浪费时间的下一个人使用。


    我遇到了同样的问题,所有解决方案均无效。当我检查历史记录时,我发现了问题所在。我有这个警告

    1
    Task Scheduler did not launch task"\TASK_NAME"  because instance"{34a206d4-7fce-3895-bfcd-2456f6ed6533}"  of the same task is already running.

    在设置选项卡中,有一个下拉选项"如果任务已经在运行,则适用以下规则:",默认值为"不启动新实例"。根据实际需要将其更改为"并行运行新实例"或"停止现有实例"。

    我知道这是一个旧线程,这里有多个解决方案都不错,这正是对我有用的方法。希望能帮助到你。


    遇到相同的问题,请确保至少选中"仅在用户登录后才运行",这才使我的bat文件再次生效。


    设置'Program / script'-> file.bat
    设置"开始于"其余路径(file.bat)


    我的应用程序无法通过"任务计划程序"启动。

    "事件查看器"中的错误是:System.IO.DirectoryNotFoundException

    "任务计划程序"尝试使用" SYSTEM"用户运行此应用程序。问题是未为" SYSTEM"用户映射"网络驱动器"。所以我要做的是,在启动应用程序之前,创建了一个" .bat"文件并映射了"网络驱动器":

    1
    2
    3
    net use T: \\172.20.2.215\images
    cd C:\MyApplication
    start MyApplication.exe

    因此,请首先检查您的日志:"事件查看器"-> Windows日志->应用程序


    对我而言,问题是由.bat包含在网络驱动器中的cd引起的。这失败了,然后在该网络驱动器中对该程序的后续调用没有任何作用。

    我通过在任务的"编辑"操作窗口的"添加参数"字段中添加> log.txt来解决此问题。


    请尝试以下代码:

    Batchfile.bat:

    1
    2
    3
    4
    cd c:\batchfilepath
    net stop"SQL Server Reporting Services (MSSQLSERVER)"
    timeout /t 10
    net start"SQL Server Reporting Services (MSSQLSERVER)"

    一种解决方案是,可以将" .bat"文件与" .vbs"文件一起运行,并且可以在Windows Scheduler中运行此vbs文件。

    1
    2
    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run("cron_jobs.bat"), 0, True

    您可以这样做,希望它能解决您的问题。


    解决方案是您应取消选中(停用)"仅在用户登录后才运行"选项。

    更改之后,它就可以在我的机器上运行了。


    在支持runas的Windows系统上。首先,通过从以该用户身份运行的命令行启动程序来独立运行程序,如下所示

    runas /user: cmd

    然后,在该新命令行中,cd到您希望任务启动器启动程序的路径,并键入完整的参数。

    cd D:\Scripts\,然后执行

    C:\python27\pthon.exe script.py

    任务计划程序抑制的任何错误都应该出现在命令行输出中,并使调试起来更容易。


    我的问题是由OneDrive引起的。 OneDrive正在同步我的批处理文件所在的文件夹,这似乎阻止了Task Scheduler执行它。 (MS上没有人测试这种东西吗?)

    无论如何,将批处理文件移动到OneDrive不在的文件夹中,可以通过Task Scheduler启动该批处理文件。


    对我来说,这是触发问题。默认情况下,它应在"触发器"选项卡中为On a Schedule。我选择了At log on,然后等待运行任务。顾名思义,它意味着您必须注销并登录。

    尝试将其放在时间表上并每分钟触发一次。

    enter image description here