指定“启动的”目录中的schtasks在Windows命令(Specifying “start-in

2019-06-23 17:06发布

我意识到这个问题是“回答”在下面的线程: 指定运行目录使用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”中。

我与它搞砸周围很多,但我似乎无法使它发挥作用。

Answer 1:

不知道你是什么版本的Windows,而是从阅读其他的问题,它看起来像Vista中/ Server 2008上Schtasks不提供命令选项,将允许您直接指定一个“启动的”目录。 所提供的解决办法人是:

  1. 使用/ V1标志创建XP / 2003兼容的任务,在这种情况下,“开始 - 在”目录会自动设置。 不知道它被设置为,但我怀疑它可能是相同的目录中执行任务,不会为你工作。
  2. 从XML文件(使用/ XML选项),这也让你指定一个“启动的”目录中创建你的任务。 对不起,我不知道这个XML文件的语法/结构。
  3. 创建使用任务计划程序UI,而不是你的任务。


Answer 2:

更新:请注意,从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 
}


Answer 3:

如果一切都失败了,你可以重定向到设置它自己的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”。 这应该保持尽可能无论你将其更改为批处理文件,并保持相对所有引用当前目录。



Answer 4:

尝试

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。



Answer 5:

当你注意,使用/ 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



Answer 6:

我发现,如果你使用8.3命名约定在schtasks的命令行的路径和文件名“开始在”字段polulated与文件路径 -

例如, “C:\ PROGRA〜1 \ NBVCl〜1个\ nbv_up〜1.EXE” 将导致在 “C:\ PROGRA〜1 \ NBVCl〜1” 出现在 “开始。在” 区域



Answer 7:

注意:这里是我只是看到了这个问题..

注意:你必须有两行:

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

注:额外的报价和额外的反斜线。

希望这可以帮助!



Answer 8:

的唯一方法是使用一个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>


文章来源: Specifying “start-in” directory in schtasks command in windows