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个回答

2

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

“事件查看器”中的错误为:System.IO.DirectoryNotFoundException

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

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

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


这对我来说很有效,因为我已经映射了网络驱动器——在我看来相当愚蠢。 - vpetkovic

2
对我来说,问题是由于 .bat 包含了一个到网络驱动器的 cd 导致的。这个失败了,那么后面对该网络驱动器中程序的调用就没有任何作用。
我通过在任务的 编辑操作 窗口的 添加参数 字段中添加 > log.txt 来找出了这个问题。

我必须填充任务的“开始位置”选项,才能创建log.txt文件。即使这样,它也是完全空的。 - Matthew

1

Try the code below:

Batchfile.bat:

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

1
解决方案是您应该取消选中(停用)“仅在用户登录时运行”的选项。 更改后,它开始在我的计算机上工作。

1
我有另一个原因,为什么脚本文件(或者可能是其他类型的文件)不能在任务计划程序中运行:文件名中包含不适合的字符!一些字符在Windows文件系统的范围内绝对有效,但是任务计划程序不喜欢它们。我的文件名使用了括号,像这样:"Cert(renew).cmd",结果无法运行。而 "Cert_renew.cmd" 则可以运行!

用户或管理员怎么会知道呢???该死的微软... - Anton Makarov

0
对我来说,这是一个触发器问题。默认情况下,在触发器选项卡中应该选择“按计划”。我选择了“在登录时”,然后等待运行任务。正如它的名称所示,在登录时,意味着您必须注销并重新登录。
尝试将其安排在计划中,并每分钟启动一次。

enter image description here


0

我的问题是由OneDrive引起的。OneDrive正在同步批处理文件所在的文件夹,这似乎阻止了任务计划程序的执行。(微软难道没有测试过这种情况吗?)

无论如何,将我的批处理文件移动到不在OneDrive中的文件夹中,就可以通过任务计划程序启动批处理文件。


0

这是一个老问题,甚至在2022年的Windows 10和Windows 11中仍然存在!

我正在使用Windows 10 Pro,因此希望为所有想要采用无脑/简单方式在Windows启动时执行批处理文件的用户提供一种易于操作且非技术性的方法。

请注意,此方法仅适用于希望在登录Windows后自动执行批处理文件/脚本/可执行文件的用户。

请按照以下步骤进行操作:

  1. 打开运行命令并输入 shell:Startup Windows Shell Startup Command

  2. 现在,Windows将打开启动文件夹。将您的批处理/可执行文件复制到此文件夹中,如下所示Windows Startup Folder Location

  3. 将此文件授予所有用户权限(虽然这不是必需的,但为了安全起见!)Give User All File Permissions

  4. 重新启动系统,您现在将看到您的批处理/可执行文件在登录后自动执行Sample of Command Line Executing after startup


0

适用于我的配置:

  • 在“常规”选项卡中:选择单选按钮 - “仅在用户登录时运行” <= 重要!
  • 程序/脚本:只需输入脚本的路径,不需要引号或其他内容:C:/tools/script.bat
  • 添加参数:保持为空
  • 起始位置:保持为空

在设置中,只勾选了2个复选框:

  • 允许按需运行任务
  • 如果请求停止运行任务时,任务未能结束,则强制停止它

0
可以在 .bat 脚本的开头使用以下代码来设置脚本的运行路径:

pushd "F:\project1"


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