Windows任务计划程序建立后,手工运行可以成功,但计划任务自动运行却不能成功,搜索网络,原来是起始于参数没有配置,这个参数的英文名字是start-in。它保证任务计划程序的WorkingDirectory就是你所设置的路径,可惜的是这个参数在win7或者win2008上只能手动设置,那如何才能使用命令自动进行修改呢?
试过网友的很多方法,目前总结出两种可行的方法来:
1 针对Windows2012,使用powershell进行参数设置
参考:
specifying “start-in” directory in schtasks command in windows
2 针对win7 或者Windows2008,可以通过修改xml方式,自动修改:
首先:第一次通过命令创建任务计划程序
然后:通过命令导出为xml格式
再次:通过脚本修改xml,添加起始于参数
最后:重新导入该xml(覆盖)即可
说了那么多,应该怎么使用命令实现呢,下面是我的一个测试例子
主要用到的命令是:
- Create your task via
schtasks.exe /create /tn MyTask ...
- Export your task to XML via
schtasks.exe /query /xml /tn MyTask > MyTask.xml
- Update this XML via XSLT or a search/replace
- Re-import (overwriting the old task) via
schtasks.exe /create /tn MyTask /xml MyTask.xml /f
:: 修改计划任务程序,由于中文导出报错,所以提前设置活动代码页编号437 MS-DOS 美国英语 chcp 437 ::开始导出名字为smdb_agent的任务计划程序 schtasks.exe /query /xml /tn SMDB_Agent > c:\tmp\SMDB_Agent.xml goto modifyAgent :modifyAgent ::如下的修改操作主要是修改xml添加run directory,其中str1就是要添加的内容,添加在带有"Command"字符串行的后面一行 set "DirPath=D:\smdb_agent\etc\" cd /D %DirPath%..\setup set "str1=^<WorkingDirectory^>%cd%^<^/WorkingDirectory^>" for /f "delims=!" %%i in ('type c:\tmp\SMDB_Agent.xml') do ( echo %%i>>c:\tmp\SMDB_AgentNew.xml echo "%%i"|findstr "Command" >nul&&echo %str1%>>c:\tmp\SMDB_AgentNew.xml) goto import ::修改完成后就可以覆盖导入了 :import schtasks.exe /create /tn SMDB_Agent /xml c:\tmp\SMDB_AgentNew.xml /f
参考:
Specifying the running directory for Scheduled Tasks using schtasks.exe