如何通过批处理文件及cmd设置任务计划程序的Start in(可选)属性
如何设置任务计划程序的「Start in」属性
嘿,我来帮你搞定这个问题!首先得说明:SchTasks /Create命令本身并没有直接指定「Start in(起始目录)」的参数,但咱们有两种可靠的方法来设置这个属性,下面详细说:
方法一:用XML模板创建任务(推荐)
这是最稳妥的方式,因为XML可以明确定义任务的所有属性,包括起始目录:
- 先创建一个XML模板文件(比如命名为
TaskTemplate.xml),把下面的内容复制进去,记得替换掉<WorkingDirectory>的值为你需要的起始目录(这里用%~dp0就代表批处理所在的目录,和你原来的命令一致),其他参数可以根据需求调整:
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2024-05-20T00:00:00</Date> <Author>YourName</Author> </RegistrationInfo> <Triggers> <CalendarTrigger> <StartBoundary>2024-05-20T09:00:00</StartBoundary> <ScheduleByDay> <DaysInterval>1</DaysInterval> </ScheduleByDay> </CalendarTrigger> </Triggers> <Principals> <Principal id="Author"> <LogonType>InteractiveToken</LogonType> <RunLevel>LeastPrivilege</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>true</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>PT72H</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="Author"> <Exec> <Command>%~dp0\Data.bat</Command> <WorkingDirectory>%~dp0</WorkingDirectory> <!-- 这里就是「Start in」对应的属性 --> </Exec> </Actions> </Task>
- 然后用下面的命令导入这个XML来创建任务:
SchTasks /Create /TN "Task" /XML "TaskTemplate.xml"
方法二:修改已创建的任务
如果你已经用原来的命令创建了任务,也可以通过导出-修改-导入的方式来添加起始目录:
- 先把已有的任务导出为XML文件:
SchTasks /Query /TN "Task" /XML > TaskExported.xml
- 打开导出的
TaskExported.xml,找到<Exec>节点,添加或修改<WorkingDirectory>节点,比如:
<Exec> <Command>C:\YourPath\Data.bat</Command> <WorkingDirectory>C:\YourPath</WorkingDirectory> <!-- 这里设置你的起始目录 --> </Exec>
- 删除原任务,再导入修改后的XML:
SchTasks /Delete /TN "Task" /F SchTasks /Create /TN "Task" /XML "TaskExported.xml"
临时替代方案(不推荐,但应急可用)
如果不想折腾XML,也可以在/TR参数里通过cmd /c先切换目录再运行批处理,效果类似设置「Start in」,但这不是真正修改任务的属性:
SchTasks /Create /SC DAILY /TN "Task" /TR "cmd /c ""cd /d \"%~dp0\" && Data.bat""" /ST 09:00
不过这种方法的引号容易出错,还是XML方法更可靠。
内容的提问来源于stack exchange,提问作者user656990
相关产品推荐
相关产品推荐

