Windows で cron。 タスクスケジューラ schtasks コマンドの使い方


はじめに

タスクスケジューラ 操作用の schtasks コマンドのチートシートです。

Windows で定期的な処理を行う場合には、タスクスケジューラを利用すると思います。

Windows10 からは at コマンドが廃止されました。 schtasks を使うか、でなければ、WSL で cron 使ったり、WMIで ExecNotificationQuery から通知受けたりすることでスケジュールタスクを実行できます。


タスク登録

タスクの登録には /create を使います。

毎日 12:00 に実行するタスクは以下のように登録できます。

schtasks /create /tn "My Taks" /tr "c:\Users\xxx\noon.bat" /sc daily /st 12:00

良く使うオプションは以下です。

オプション 説明
/sc <scheduletype> スケジュールの種類を指定。後述
/tn <taskname> タスクの名前を指定(スペースを含む場合は引用符を使用)。 /tn <folder name\task name> を指定
/tr <Taskrun> タスクを実行するコマンド(完全修飾パス)。 パスを追加しない場合、ファイルは \System32 ディレクトリにあると見なされる
/f タスクを作成し、指定したタスクが既に存在する場合に警告を抑制するように指定

実行コマンドにコマンドライン引数を渡したい場合は、コマンドライン引数まで含めて全体をダブルクォートで囲みます(コマンドライン引数自体にスペースを含めたい場合は、シングルクォートで囲む)。

/sc <scheduletype> には以下のいずれかを指定します。

  • MINUTE : タスクを実行するまでの時間を分単位で指定
  • HOURLY : タスクを実行するまでの時間数を指定
  • DAILY : タスクを実行するまでの日数を指定
  • WEEKLY : タスクを実行するまでの期間を週単位で指定
  • MONTHLY : タスクを実行するまでの期間を月単位で指定
  • ONCE : 指定した日時にタスクを 1 回実行することを指定
  • ONSTART : システムが起動するたびにタスクを実行することを指定
  • ONLOGON : ユーザーがログオンするたびにタスクを実行することを指定
  • ONIDLE : システムが一定期間アイドル状態になるたびにタスクを実行することを指定

時間(周期)の指定には以下のオプションがあります。

オプション 説明
/st <Starttime> 24 時間形式、HH:mm を使用して、タスクの開始時刻を指定
/mo <modifiers> 実行する頻度を指定
/d DAY 実行する頻度を指定
/m MONTH 1 か月またはスケジュールされたタスクを実行する年の月を指定

例えば以下のようになります。

  • /sc once /m 6 /d 20 : 6/20 に1度だけ実行
  • /sc once /sd 2023/01/01 /st 07:55 : 指定日時に1度だけ実行
  • /sc hourly /mo 3 : 3時間毎に実行
  • /sc daily /st 12:00 : 毎日12時に実行
  • /sc monthly : 毎月初に実行
  • /sc monthly /mo last : 毎月最終週に実行
  • /sc monthly /mo lastday : 毎月月末に実行
  • /sc monthly /mo 2 /d 5 : 2 カ月ごとに 5日に実行

詳細はschtasks-createを参照してください。


タスク一覧

タスクの詳細は /tn でタスク名を指定して以下で参照できます。

schtasks /query /tn "My Taks" /fo list /v

全タスクの一覧は以下で照会できます。

schtasks /query

しかし見にくいので、[Windows]+[R]で 「taskschd.msc」 で GUI から見た方が分かりやすいです。


タスク削除

登録したタスクは以下で削除できます。

schtasks /delete /tn "My Taks"