この質問は次のスレッドで「回答」されていることを理解しています: schtasks.exe を使用してスケジュールされたタスクの実行ディレクトリを指定
しかし、私はまだ答えを理解し、自分の状況で結果がどのようになるかを正確に確認するのに苦労しています。
私のschtasksコマンドは次のようになります。
Schtasks /Create /TR "C:\Program Files\Java\jre6\bin\javaw.exe main.MoveFile input.txt" /SC WEEKLY /TN mytask
「C:\ My Library」のディレクトリの先頭を指定したい。 trセクションの前に "\"を置くと、「C:\ Program Files\Java\jre6\bin」の開始ディレクトリが埋められます。
私はそれを何度もいじりましたが、私はそれを機能させることができないようです。
現在使用しているWindowsのバージョンはわかりませんが、他の質問を読むと、Vista/Server 2008のschtasksには、「開始」ディレクトリを直接指定できるコマンドオプションがないようです。提供された回避策は次のとおりです。
PDATE: 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
_スイッチを使用したAmalのソリューションは素晴らしいですが、カスタムフォルダーにタスクを作成することはできません(つまり、「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:\ example\batch.bat」として。これにより、現在のディレクトリをバッチファイルで変更したとおりに維持し、それに関連するすべての参照を維持できます。
お気づきのように、/ 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
試す
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を実行してください。
パスとファイル名のSCHTASKSコマンドラインで8.3命名規則を使用すると、「開始」フィールドにファイルパスが挿入されることがわかりました。
例えば「C:\ Progra〜1\NBVCl〜1\nbv_up〜1.exe」を実行すると、「C:\ Progra〜1\NBVCl〜1」が「開始」領域に表示されます
わかりました、この質問は10歳(WOW!ちょうど10年、お誕生日おめでとう!)
特定のディレクトリから実行されるタスクをスケジュールします。pwd
コマンドが実行されるたびにこのディレクトリをc:\x
と呼ぶと、c:\x
。そこからのすべてのパスは、そのディレクトリからの相対パスです。
別の例:Java -jar myapp.jar
を実行すると、c:\x\myapp.jar
にある[〜#〜] jar [〜#〜]ファイルが実行されます
コマンドschtasks /create
を使用してその特定のパラメータを設定することは不可能です
少しステッピーです(多すぎるステップのように):
schtasks /create
コマンドを使用して、できるだけ具体的なタスクを作成します。すべてのパラメーターを目的の値に設定してみてください:開始時間、繰り返し、継続時間など...
この場合、/tn
引数は必須なので、次のように設定します:\tn mytask
schtasks /query /tn mytask /xml > mytask.xml
を使用して、新しく作成したタスクをXMLにエクスポートします
お気に入りのエディターでmytasks.xml
を開きます。あなたはこのようなものを見るはずです(私は興味のない部分を隠しました):
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.Microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>...
</RegistrationInfo>
<Triggers>...
</Triggers>
<Settings>...
</Settings>
<Actions Context="Author">
<Exec>
<Command>Java</Command>
<Arguments>-jar c:\x\myapp.jar</Arguments>
</Exec>
</Actions>
<Principals>...
</Principals>
</Task>
<Exec>
セクション内の<Argument>
フィールドの下に、新しいフィールドを紹介します。<WorkingDirectory>c:\x\</WorkingDirectory>
ファイルを保存します。このフィールドは、ここのxmlスキーマ定義で定義されています https://docs.Microsoft.com/en-us/windows/desktop/taskschd/task-scheduler-schema
以前に作成したタスクを削除します(変更されたxmlを使用して再作成するには):schtasks /delete /tn mytask
/xml
引数を使用してタスクを再度作成します:schtasks \tn mytask \xml mytask.xml
schtasks /run /tn mytask
を使用して実行します
それで終わりです。お役に立てば幸いです。私はこれが将来私に役立つことを知っています:)
唯一の方法は、XMLファイルを使用することです。次のコマンドを使用します。schtasks/Create/XML C:\ file.xml/TN TaskName/RU domain\username/RP password
毎日23:00に実行されるサンプルXMLファイルでは、C:\ taskfolderがrun inディレクトリを設定します。
<?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>
注:これは私がこれで見たばかりの問題です。
注:次の2行が必要です。
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で気づいたことの1つは、たとえば、それが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
注:追加の引用と追加のバックスラッシュ。
お役に立てれば!