2009-06-19 98 views
15

命令我意識到這個問題是「回答」在下面的線程:Specifying the running directory for Scheduled Tasks using schtasks.exe指定「開始 - 在」在目錄中的schtasks在Windows

但是,我仍然無法理解的答案,正是看到結果會看起來像我的情況。

我的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」的啓動目錄之前,先寫入「\」

我搞砸了很多,但我似乎無法讓它工作。

回答

14

不知道您使用的Windows版本是什麼,但是從閱讀其他問題看起來,它看起來像在Vista/Server 2008上的schtasks沒有提供命令選項,允許您直接指定「啓動」目錄。人們提供的解決方法如下:

  1. 使用/ v1標誌創建XP/2003兼容任務,在這種情況下,會自動設置「開始」目錄。不知道它是什麼設置,但我懷疑它可能是與您的任務可執行文件相同的目錄,這對您不起作用。
  2. 從一個XML文件(使用/ XML選項)創建您的任務,它允許您指定一個「啓動」目錄。對不起,我不知道這個XML文件的語法/結構。
  3. 改爲使用Task Scheduler UI創建您的任務。
+0

良好的解決方案,但似乎並沒有允許任務名稱與文件夾 - 即你不能創建「我的公司\ MyTask」與/ v1開關(雖然沒有開關工作) – andreister 2011-11-22 15:24:37

+0

只是/ v1和魔術!謝謝... – mimoralea 2012-10-02 18:39:40

+0

/V1標誌有效,但你需要確保/ TR路徑在路徑中使用反斜線。當我在路徑中使用正斜槓時,任務無法成功運行。 – panofish 2014-12-18 15:07:26

0

我發現,如果你使用8.3命名約定在schtasks的命令行的路徑和文件名「開始在」字段polulated與文件路徑 -

例如「C:\ PROGRA〜1 \ NBVCl〜1 \ nbv_up〜1.EXE」 會導致 「C:\ PROGRA〜1 \ NBVCl〜1」 出現在 「開始在」 區域

+1

這對我無效 – panofish 2014-12-18 14:55:24

1

當你注意,在/ 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

10

UPDATE:注從Powershell v3開始(但僅限於Windows 2012及更高版本!)有新的API,我覺得更有吸引力:

$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:"[email protected]$$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 
} 
2

嘗試

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。

5

如果一切都失敗了,你可以重定向到一個批處理文件來設置它自己的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」。這應該保持當前目錄爲你修改它的批處理文件,並保留所有相關的引用。

0

注:這裏是我只是看到了這個問題..

注意:你必須有兩條線:

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年處理批處理腳本要好得多。我不認爲「運行」文件夾是一樣重要,因爲我只是在一臺測試機器上手動從Task Scheduler運行服務器重啓,它運行得很好..

對於可能遇到轉義問題的人人物和這樣的,考慮以下因素:

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 

注:額外的報價和額外的反斜線。

希望這會有所幫助!

0

唯一的方法是使用XML Flle,使用以下命令:schtasks/Create/XML C:\ file。XML/TN TASKNAME/RU域名\用戶名/密碼RP

示例XML文件將在每天的23:00運行,將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> 
相關問題