任务计划无法正常运行批处理文件的解决方法

Windows 任务计划与 BAT 批处理文件都是我们经常使用的工具,一个可以帮助我们定期执行计划的任务、一个可以帮助我们一次执行一系列预先编好的命令。在 Windows 系统的维护工作中,我们经常需要将任务计划与批处理配合起来使用,即通过设置任务计划定期执行批处理文件定义的一系列命令与操作。


有时候,我们可能会遇到任务计划与批处理无法正常协同工作的情况。例如,一个同样的批处理文件,我们
可能手动运行它时一切正常
(说明批处理文件的内容没有错误),但将这个批处理文件添加为任务计划后却无法按照预期运行。笔者在微软中文论坛收集了几种
解决任务计划与批处理无法协同工作的方法,希望可以帮助大家在遇到类似问题时参考。

1. 在任务计划中正确设置执行批处理的用户身份与权限。

当我们在任务计划中添加新任务时,其中有一个步骤是指定运行此任务的用户帐户,并需要输入用户帐户的
密码进行确认。如果任务计划设置的用户帐户身份或权限,与我们手动运行批处理文件时的用户帐户不同,就可能会出现以任务计划方式运行批处理的结果与手动运行同样的
批处理时结果不同的现象。

例如,假设一个批处理涉及的命令需要管理员权限或者特定用户帐户的配置文件才可以正常运行,如果执行
此批处理的任务计划被指定为一个
非管理员帐户或不具备相应用户配置的用户帐户,那么此批处理很可能在以任务计划的方式运行时无法得到其预期的效果。因此,当我们在添加任务计划并希望以另一个用户帐户的身份与权限运行批处理时,一定要在添加新任务向导中检查运行批处理的用户帐户身份与权限是否满足运行此批处理的要求。

2. 通过快捷方式为批处理指定起始位置。

有些批处理文件需要我们为其设置好特定的“起始位置”才可以正常运行,否则可能会遇到批处理无法找到
指定路径的错误。当我们手动执行
批处理时,无论是在资源管理器中用鼠标双击运行批处理,还是首先打开命令提示符窗口、然后再在命令提示符中执行批处理,
资源管理器当前打开的文件夹位置与命令提示符当前所在的提示符位置都已经自动为我们设置好了执行批处理时的起始位置。然而,
当我们以任务计划方式执行批处理时,任务计划却无法自动指定执行批处理时所需的起始位置,这样也可能会造成以任务计划方式执行批处理时无法得到预期的效果。

为了解决这一问题,我们可以首先为批处理文件建立一个快捷方式,然后修改快捷方式的属性,在“常规”
选项卡中设置正确的“起始位置”,接下来我们再添加任务计划,将新任务指定为这个快捷方式文件而不是批处理本身。这样,任务计划会在任务指定的时间自动执行指向
批处理的快捷方式,对应的批处理在运行时就具有正确的起始位置了。

3. 尽量避免在批处理内容中出现过多的引号。

如果在批处理文件的内容里出现了过多的引号,即批处理中有一条或多条命令及参数被引号扩起来,这不仅
可能在编写批处理命令时容易出错,而且可能会造成特定版本 Windows 的任务计划无法正确识别批处理中包含的命令。特别是在一个父级引号中还有子级的引号时,尤其容易出现此类问题。根据微软知识库 KB951246 提供的信息,这个问题主要存在于 Windows Vista/Server 2008 系统。
 
4. 将批处理文件转换为可执行文件或脚本后再添加任务计划。
 
有时当任务计划无法正确执行批处理文件的部分内容时,我们还可以尝试将批处理转换为其它格式的可执行文件或脚本,然后再添加至
任务计划。转换格式虽然执行的命令与任务不变,但将批处理转换为可执行文件或脚本可以改变任务运行的顺序与方式,有时说不定可以
解决问题。
 
批处理常见的格式转换包括将 .BAT 文件转换为 .EXE 或 .COM 可执行文件,或者转换为 .VBS 脚本,这类转换可以通过 BAT2EXE、
BAT2COM、BAT to EXE Converter、批处理加密转换器等第三方软件实现。

5. 在批处理中添加为正常运行后续命令所需的先决命令。

如果我们遇到了一些比较极端的批处理与任务计划无法协同工作的问题,无论怎样在任务计划的运行环境中 设置都不能解决,
那么可以考虑将一些正确完成批处理命令所需的先决命令添加在原批处理内容的最前面, 在批处理自身的层面加以解决。
 
例如,笔者最近在微软中文论坛见到一则问题:有位用户编写了一个备份开发代码的批处理,并将其添加为任务计划,希望在每天凌晨时
自动运行。但是,这个批处理涉及的文件备份与复制操作需要访问 $IPC 网络映射地址。经测试,用户编写的批处理内容没有问题,
如果手动运行批处理,可以正确地访问目标地址并且完成备份;但如果将此批处理添加为任务计划就无法正确执行备份与复制操作。
设置任务计划的用户权限、设置起始位置、对批处理进行格式转换等方法均无法解决。
 
最终解决这个问题的方法是在批处理内容的前面添加了一条:

NET USE Z:\\XXX.XXX.XXX.XXX\D$ "Password" /User:"Administrator"

将批处理正常访问映射地址的先决命令写在原批处理文件内容的前面,最终这个批处理文件就可以通过任务计划方式正常运行了。

 

 

转自:https://blog.csdn.net/tzysf/article/details/51302039

https://www.cnblogs.com/lxshanye/archive/2013/02/02/2889732.html

posted @ 2020-04-29 16:52  Journey&Flower  阅读(2593)  评论(0编辑  收藏  举报