我意识到这个问题是“回答”在下面的线程: 指定运行目录使用SchTasks.exe会预定任务
但是,我仍然无法理解的答案,正是看到的结果将是什么样子我的情况。
我的schtasks命令如下:
Schtasks /Create /TR "C:\Program Files\Java\jre6\bin\javaw.exe main.MoveFile input.txt" /SC WEEKLY /TN mytask
我想指定的目录中启动“C:\我的图书馆”。 在TR部分之前把一个“\”填写的开始,在目录“C:\ Program Files文件\的Java \ JRE6 \ bin”中。
我与它搞砸周围很多,但我似乎无法使它发挥作用。
不知道你是什么版本的Windows,而是从阅读其他的问题,它看起来像Vista中/ Server 2008上Schtasks不提供命令选项,将允许您直接指定一个“启动的”目录。 所提供的解决办法人是:
- 使用/ V1标志创建XP / 2003兼容的任务,在这种情况下,“开始 - 在”目录会自动设置。 不知道它被设置为,但我怀疑它可能是相同的目录中执行任务,不会为你工作。
- 从XML文件(使用/ XML选项),这也让你指定一个“启动的”目录中创建你的任务。 对不起,我不知道这个XML文件的语法/结构。
- 创建使用任务计划程序UI,而不是你的任务。
更新:请注意,从Powershell的V3开始有新的API,我觉得更具有吸引力(但仅适用于Windows 2012和更高下进行!):
$taskPath = "\MyTasksFolder\"
$name = 'MyTask'
$runAt = '5:00 AM'
$exe = 'my.exe'
$params = 'command line arguments'
$location = "C:\Path\To\MyTask"
Unregister-ScheduledTask -TaskName $name -TaskPath $taskPath -Confirm:$false -ErrorAction:SilentlyContinue
$action = New-ScheduledTaskAction –Execute "$location\$exe" -Argument "$params" -WorkingDirectory $location
$trigger = New-ScheduledTaskTrigger -Daily -At $runAt
Register-ScheduledTask –TaskName $name -TaskPath $taskPath -Action $action –Trigger $trigger –User 'someuser' -Password 'somepassword' | Out-Null
阿迈勒与解决方案/v1
开关是伟大的,但不允许创建自定义文件夹任务(即你不能创建“MyCompany的\ MyTask”,一切都在根文件夹结束),所以我终于结束了一个PowerShell脚本如下面所描述的。
用法:
CreateScheduledTask -computer:"hostname-or-ip" `
-taskName:"MyFolder\MyTask" `
-command:"foo.exe" `
-arguments:"/some:args /here" `
-workingFolder:"C:\path\to\the\folder" `
-startTime:"21:00" `
-enable:"false" `
-runAs:"DOMAIN\user" `
-runAsPassword:"p@$$w0rd"
(注意, enable
必须是小写-一个布尔你需要$value.ToString().ToLower()
执行:
该函数使用XML任务定义和“Schedule.Service” COM对象。
#####################################################
#
# Creates a Windows scheduled task triggered DAILY.
# Assumes TODAY start date, puts "run-as" user as task author.
#
#####################################################
function CreateScheduledTask($computer, $taskName, $command, $arguments, $workingFolder, $startTime, $enable, $runAs, $runAsPassword)
{
$xmlTemplate = "<?xml version='1.0' encoding='UTF-16'?>
<Task version='1.2' xmlns='http://schemas.microsoft.com/windows/2004/02/mit/task'>
<RegistrationInfo>
<Date>{0}</Date>
<Author>{1}</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>{2}</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id='Author'>
<UserId>{1}</UserId>
<LogonType>Password</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<IdleSettings>
<Duration>PT10M</Duration>
<WaitTimeout>PT1H</WaitTimeout>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>{3}</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context='Author'>
<Exec>
<Command>{4}</Command>
<Arguments>{5}</Arguments>
<WorkingDirectory>{6}</WorkingDirectory>
</Exec>
</Actions>
</Task>"
$registrationDateTime = [DateTime]::Now.ToString("yyyy-MM-dd") + "T" + [DateTime]::Now.ToString("HH:mm:ss")
$startDateTime = [DateTime]::Now.ToString("yyyy-MM-dd") + "T" + $startTime + ":00"
$xml = $xmlTemplate -f $registrationDateTime, $runAs, $startDateTime, $enable, $command, $arguments, $workingFolder
$sch = new-object -ComObject("Schedule.Service")
$sch.Connect($computer)
$task = $sch.NewTask($null)
$task.XmlText = $xml
$createOrUpdateFlag = 6
$sch.GetFolder("\").RegisterTaskDefinition($taskName, $task, $createOrUpdateFlag, $runAs, $runAsPassword, $null, $null) | out-null
}
如果一切都失败了,你可以重定向到设置它自己的CD的批处理文件,然后调用你的程序。
例如:
Schtasks /Create /TR "C:\example\batch.bat" /SC WEEKLY /TN mytask
由于schtask,和
cd "%temp%\"
"C:\Program Files\Java\jre6\bin\javaw.exe main.MoveFile input.txt"
为 “C:\示例\ batch.bat”。 这应该保持尽可能无论你将其更改为批处理文件,并保持相对所有引用当前目录。
尝试
cd /d "C:\Program Files\Java\jre6\bin" & schtasks /create /tr "C:\Program Files\Java\jre6\bin\javaw.exe main.MoveFile input.txt" /sc WEEKLY /tn mytask
改变工作目录,然后运行的schtasks。
当你注意,使用/ tr参数的额外的引号的把戏只允许您使用相同的目录中,其中的可执行文件驻留。 如果要指定一个不同的工作目录,你应该使用/ XML选项,并指定其中列出了工作目录中的XML文件。 该命令将是这样的:
SchTasks /Create /TN "Foo" /XML task.xml
该XML文件看起来是这样的:
<?xml version="1.0" ?>
<Task xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2006-05-02T13:21:17</Date>
<Author>AuthorName</Author>
<Version>1.0.0</Version>
<Description>Call MoveFile</Description>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2011-11-02T00:00:00</StartBoundary>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal>
<UserId>Administrator</UserId>
<LogonType>InteractiveToken</LogonType>
</Principal>
</Principals>
<Settings>
<Enabled>true</Enabled>
<AllowStartOnDemand>true</AllowStartOnDemand>
<AllowHardTerminate>true</AllowHardTerminate>
</Settings>
<Actions>
<Exec>
<Command>C:\Program Files\Java\jre6\bin\javaw.exe</Command>
<Arguments>main.MoveFile input.txt</Arguments>
<WorkingDirectory>C:\My Library</WorkingDirectory>
</Exec>
</Actions>
</Task>
这里有关于XML架构的详细信息: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383609(v=VS.85).aspx
我发现,如果你使用8.3命名约定在schtasks的命令行的路径和文件名“开始在”字段polulated与文件路径 -
例如, “C:\ PROGRA〜1 \ NBVCl〜1个\ nbv_up〜1.EXE” 将导致在 “C:\ PROGRA〜1 \ NBVCl〜1” 出现在 “开始。在” 区域
注意:这里是我只是看到了这个问题..
注意:你必须有两行:
REM NOTE:You have to create the schedule first
SCHTASKS /S SERVER /CREATE /TN "SERVER_RESTART" /RU "" /TR "D:\WORK\scripts\__server_restart.bat 1" /SC MONTHLY /MO FIRST /D SUN /ST:02:10
REM The next line is run to set the run in folder as well as set the: run as: NT AUTHORITY\SYSTEM
SCHTASKS /S SERVER /CHANGE /TN "SERVER_RESTART" /RU "" /TR "D:\WORK\scripts\__server_restart.bat 1"
的事情之一,我已经与Windows 2008注意,是其处理批处理脚本比2003好很多,例如。 我不认为“运行中”文件夹是重要的,因为我只是跑手动测试机从任务计划程序在服务器重新启动,它运行得很好..
对于可能运行到问题与转义字符,这样的人,考虑以下因素:
SCHTASKS /CHANGE /S SERVER /RU "" /TR "powershell -file "\"D:\WORK\ps\zip_up_files\zip_up_files.ps1"\"" /TN "PowerShell - New Archive"
或者,另一实施例:
SCHTASKS /CREATE /S SERVER /RU "" /TR "powershell -file "\"D:\WORK\ps\page_test.ps1"\"" /TN "PowerShell - Page Test" /SC MINUTE /MO 3 /ST:23:00
注:额外的报价和额外的反斜线。
希望这可以帮助!
的唯一方法是使用一个XML Flle,使用下面的命令:的schtasks /创建/ XML C:\ file.xml / TN TASKNAME / RU域\用户名/密码RP
这将在每天23:00运行示例XML文件,在C:\ taskfolder将设置在目录中运行:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2016-07-13T07:56:56</Date>
<Author>Administrator</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2016-07-13T23:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>domain\Administrator</UserId>
<LogonType>Password</LogonType>
<RunLevel>HighestAvailable</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>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\taskfolder\task.bat</Command>
<WorkingDirectory>C:\taskfolder</WorkingDirectory>
</Exec>
</Actions>
</Task>