Windows任务计划程序无法启动批处理文件任务。

52

我有一个批处理文件,其中包含以下代码,用于停止和启动SQL报表服务:

net stop "SQL Server Reporting Services (MSSQLSERVER)" 

timeout /t 10

net start "SQL Server Reporting Services (MSSQLSERVER)"

我已经设置了每天运行的计划任务,它当前使用最高权限SYSTEM运行。我在操作中设置了“开始于文件夹”选项,一切似乎都正确地设置了。但是当我运行任务时,好像什么都没有发生,它说任务已经运行过了,但是我不能看到服务已经重新启动了,这是它应该做的。
有人可以指导我缺少什么吗?

1
如果使用用户凭据而不是系统凭据,它是否有效?这将是一个很好的测试,以查看它是否作为计划任务运行。也许可以注释掉 net start 行,并验证服务是否已经停止 - 以查看权限是否存在问题。 - foxidrive
我已将其编辑为只包含停止命令行,尝试使用我的凭据和另一个用户的凭据,但未能停止该服务。我可以单独运行批处理文件,而不是与任务一起运行,它可以正常工作。 - jimminybob
也许它没有被正确地启动,或者仍然存在权限问题 - 或者批处理文件中还有我们尚未看到的内容。 - foxidrive
批处理文件仅包含我上面复制的位。我在其他地方读到,如果批处理文件包含引号,则无法从任务中运行。这是真的吗?如果是这样,我该如何解决? - jimminybob
你可能误解了引用注释,或者它是错误的。在命令行中,您需要对包含空格和其他特殊字符的术语使用双引号,但它们将正常工作。在任务计划程序中,您可能需要像这样启动批处理文件:cmd /c "c:\myfolder\mybatch.bat" - foxidrive
21个回答

129

请确保正确设置'开始位置''程序/脚本'选项。如果您的文件地址为:C:\Temp\foo.bat,则将'开始位置'选项设置为'C:\Temp',将'程序/脚本'选项设置为'foo.bat'。

设置'开始位置'选项的方法:右键单击任务计划程序中的任务 > 属性 > 操作 > 编辑

如果仅此不起作用,请尝试将 .bat 文件移动到一个具有基本权限的目录中(例如共享目录)。

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


7
可以,这个方法有效。只需将“开始位置(start in)”参数设置为批处理文件所在的目录即可。 - Kellen Stuart
2
是的,即使它说起始位置是可选的,只需添加以匹配我的批处理文件路径即可。也许它正在从批处理文件名中剥离路径? - Luke Briner

29

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

在你的批处理文件所在的位置的第一行添加一个cd命令,看看是否能解决问题。

cd D:\wherever\yourBatch\fileIs

TIP: 请使用绝对路径,相对路径理论上不会有问题,但调度程序可能难以理解它们。


这对我来说是解决方法(看起来是这样)。通过添加CD以进入包含脚本运行的EXE文件夹,似乎已经解决了问题。答案得到了赞同。我想知道是否添加“启动位置”也可以工作,但我不想冒险! - Gazman Development Gosford
有点晚了,但另一个选项不是可以这样吗:pushd“%〜dp0”然后您就不必担心路径是否正确,或在移动脚本时更改它。当然,您还需要以以下方式结束脚本:popd - Anders Jensen

16

这个帖子很古老,但问题仍然存在 -

我尝试了许多方法,但没有一个有效 -

  1. 添加“Start In Path”(不带引号)
  2. 在程序/脚本字段中删除批处理文件的完整路径等
  3. C:\Windows\system32\cmd.exe添加到程序中,并在参数字段中添加/c myscript.bat

这就是对我有用的方法 -

程序/脚本字段 - cmd

添加参数 - /c myscript.bat

启动位置:myscript.bat的路径


1
你好Simitraa,欢迎来到本站。我尝试编辑了一下你的答案,让它更加美观简洁,你可以再次进行编辑。 - MackM
这对我没用。一个 DOS 窗口会在屏幕上短暂闪现,但它并不运行。 - Matthew
我尝试了很多方法,但这个对我有效。启动路径为:myscript.bat的路径没有双引号 "",即(D:\Projects\IOT\scripts)。 - Ein2012

9

我曾经遇到同样的问题,我认为这是一个权限问题。如果你选择了“仅在用户登录时运行”,那么这个问题就不会发生。

希望你现在已经解决了这个问题,但我想在这里注册一下,为下一个花费数小时来解决此问题的人提供帮助。


将选项从“无论用户是否登录”更改为“仅在用户登录时运行”对我很有效。还要指出的是,仅仅因为您锁定了计算机并不会改变您已登录的事实。因此,即使您锁定了计算机,任务仍将继续运行。 - Bobbie E. Ray

9

我曾在Windows Server操作系统上运行过这个程序。

我花了几个小时的时间,最终发现问题出在我勾选了“以最高权限运行”复选框。当它被勾选时,它会删除所有驱动器映射,而我的.bat文件是在网络上的。

enter image description here


7

我曾经遇到过同样的问题,确保你勾选了“仅在用户登录时运行”的选项,至少这是让我的批处理文件重新运行的原因。


4

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

runas /user:<domain\username> cmd

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

cd D:\Scripts\,然后执行

C:\python27\pthon.exe script.py

任何被任务计划程序抑制的错误都将显示在命令行输出中,并且这将使调试变得更加容易。


4

设置 '程序/脚本' -- > file.bat 设置 '起始位置' 为文件所在路径 (file.bat)


3

一种解决方案是,您可以使用'.vbs'文件来运行您的'.bat'文件,并且您可以在Windows计划任务中运行此vbs文件。

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

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

3
我曾遇到同样的问题,但是所有的解决方案都没有起作用。当我查看历史记录时,我发现了问题所在。我收到了以下警告:
任务计划程序未启动任务“\TASK_NAME”,因为已经运行“{34a206d4-7fce-3895-bfcd-2456f6ed6533}”的相同任务实例。
在设置选项卡中,有一个下拉选项:“如果任务已在运行,则应用以下规则:”,默认选项为“不启动新实例”。根据您实际需要做什么,将其更改为“并行运行新实例”或“停止现有实例”。
我知道这是一个旧线程,有多个解决方案都是好的,这只是对我有效的解决方案。希望它能帮到你。

非常感谢!这解决了我的问题!我发现我的笔记本电脑从睡眠中醒来后,有些任务还在挂起但没有执行任何操作,这些任务阻止了新任务的启动。我一直在苦苦思索,却从未注意到这个设置。 - Christian Shay
在这里,您可以查看事件查看器中的日志:https://knowledge.broadcom.com/external/article/37223/how-do-i-monitor-windows-scheduled-tasks.html - sudhAnsu63

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接