Windows NTやWindows 2000でスケジュールを登録するのはatコマンドだったが、これは使いにくかった。
Windows XPやWindows Server 2003でスケジュールの登録や削除を行うコマンドとして、新たに
schtasksが提供されている。
今まで使う機会が無かったのだが、今回ちょっとしたことで使ってみる事になった。
<登録>
schtasks /create
<変更>
schtasks /change
<削除>
schtasks /delete
<一覧>
schtasks /query
<実行>
schtasks /run
<停止> schtasks /end
詳しくはそれぞれのヘルプを参照のこと。(schtasks /create /? など)
早速Windows XP Professional SP2で登録のテストをしてみる。
いくつかの参考になるサイトを見ると、実行パスに空白が含まれているときに問題が発生するとの情報が出ているので、それを確認したい。
そのため同じバッチファイルを2ヶ所に保存して試してみる事にした。
・D:\Temp\TEST.bat
・C:\Program Files\Bat\TEST.bat
それら2つのバッチファイルをGUIで手動で登録し、またschtasksコマンドでもスケジュール登録してみる。
つまり登録されたスケジュールは以下の4つになる。
・タスク名:TEST01 - D:\Temp\TEST.batを手動でスケジュール登録
・タスク名:TEST02 - D:\Temp\TEST.batをschtasksでスケジュール登録
・タスク名:TEST11 - C:\Program Files\Bat\TEST.batを手動でスケジュール登録
・タスク名:TEST12 - C:\Program Files\Bat\TEST.batをschtasksでスケジュール登録
(写真1)schtasks /createによりスケジュールを登録した

実行するバッチファイルのパスに空白が含まれていても、登録は正常にできる。
もちろんパス名に空白を含まない場合も問題なし。
(写真2)登録された4つのスケジュール

TEST01とTEST11はタスクスケジューラのGUIにより手動で登録。
TEST02とTEST12はschtasks /createによりバッチで登録。
(写真3)登録したタスクを実行してみた

TEST01、TEST02、TEST11は正常に実行できる。
しかしTEST12は「開始できませんでした」となる。
TEST12はschtasks /create で"C:\Progra~1\Bat\TEST.bat"を登録したパターンだ。
(写真4)TEST01とTEST02のプロパティ画面

GUIによる手動登録もschtasksコマンドによる登録も同じように見える。
(写真5)TEST11とTEST12のプロパティ画面

おやおや、これは確かに違うな。
途中に空白が含まれているのに、schtasksで登録したTEST12の「実行するファイル名」ではパスがダブルクォーテーションで囲まれていない。
(写真6)試しに短いファイル名を使ってschtasksで登録してみる

~(チルダ)を使った8.3形式の短いファイル名は最近ではすっかり見かけないよなあ。
その短い形式を使ってもschtasksコマンドで登録できた。
(写真7)短いファイル名で登録したタスクは正常に実行された

短いファイル名の形式で登録したタスクは正常に実行された。
これでいいっちゃあいいんだけど、なんだかかっこ悪いしスマートではない。
何で素直にダブルクォーテーション付きでパス名が登録されないんだろう。
schtasks /createでタスクを登録するときに、コマンドラインからはダブルクォーテーションで囲まれた内側の文字列が渡されるんだろうね。
気を取り直して、コマンドのサンプル。
schtasks /create /tn TEST12 /tr "C:\Program Files\Bat\TEST.bat" /sc weekly /d sat,sun /st 03:00:00 /ru Administrator /rp パスワード
schtasks /createのオプション。
/tn タスク名
/tr タスクのパス
/sc スケジュールの種類(日、週、月、1回だけ、コンピュータ起動時、ログオン時など)
/d タスクを実行する曜日または日を指定(/scがweeklyの場合、mon,tue,wed,thu,fri,sat,sun)
/st タスクを実行する時刻をhh:mm:ssで指定
/ru タスクを実行するユーザ名
/rp タスクを実行するユーザのパスワード
http://support.microsoft.com/kb/814596/ja
・[HOWTO] Windows Server 2003 で Schtasks.exe を使用してタスクをスケジュールする方法
http://technet2.microsoft.com/WindowsServer/ja/library/1d284efa-9d11-46c2-a8ef-87b297c68d171041.mspx?mfr=true
・Microsoft TechNet > Windows Server TechCenter > Schtasks
同じような事で悩んでいる人もちらほら。
http://www.google.co.jp/search?q=schtasks+%2Fcreate+%83p%83X+%8B%F3%94%92
・schtasks /create パス 空白 - Google 検索