Windows10のタスクスケジューラでバッチファイルを動かす¶
バッチファイルをWindows10のタスクスケジューラに登録して、ログインするごとにファイルのバックアップをするようにしてみました。
試してみた環境は下記です。
Windows10 Home バージョン1703
目次
背景¶
先日、PCが起動不能の状態になってしまってOSをクリーンインストールする羽目になってしまいました。メールのアーカイブが消失するという悲しい事になってしまいましたので、NASのネットワークドライブに自動的にバックアップするようにしてみました。
やり方としては、Windows Network上のNASの共有ドライブに、robocopy.exeを使ってファイルをコピーしたりミラーリングしたりします。いちいちコマンドを入力するのは面倒ですので、バッチファイルにして、Windows10のタスクスケジューラに定期的に実行してもらいます。
バッチファイル¶
バッチファイルはこんな感じにしました。
> net use アドレス パスワード /user:ユーザー名
というコマンドで、ネットワークドライブへ接続します。
IF EXIST ネットワークドライブのフォルダ (
robocopy
) ELSE (
echo 文章 >> テキストファイル
)
バッチファイル内で条件分岐を使って、バックアップ先のフォルダが存在するか確認をします。ホームネットワーク外で勝手にファイルをコピーしないようにするのと、NASが起動していないときにrobocopyしないようにするためです。
robocopyの使い方については、こちらのページを見ていただければと思います。
echoは標準出力に文字列を出力するコマンドですが、これを使って、ネットワークドライブにアクセスできなかったときにログファイルにログを追記するようにしました。
タスクスケジューラに登録¶
Windows10の場合は、ウィンドウキー+Xというショートカットで開くメニューから、「コンピュータの管理」を選択します。
すると、左側のメニューにタスクスケジューラというのがありますので、それを選んで、右側の操作メニューの中から「基本タスクの作成」を使ってバッチファイルを登録します。
バッチファイルの指定の仕方なのですが、「プログラム/スクリプト」の欄にバッチファイルを指定しても動きませんでした。
そこで、「プログラム/スクリプト」の欄にはコマンドプロンプト(cmd.exe。c:windowssystem32にあることが多いと思います。)を入力し、cmd.exeの引数としてバッチファイルを指定します。(/c c:hogehogepiyopiyo.batという感じ。) 「開始」の欄には作業フォルダを入力するのですが、効果はわかりませんでした。
これで自動的にバッチファイルを実行してくれるのですが、実行するたびにコマンドプロンプトのウィンドウが一瞬開くのでちょっと目障りです。
VBScriptからバッチファイルを呼び出す¶
バッチファイルを非表示で呼び出すVBScriptを作って、そのVBScriptファイルをタスクスケジューラで定期的に実行するようにします。
VBScriptは下記のような単純なものです。シェルスクリプトオブジェクトを作って、cmd.exeにバッチファイルを引数にして呼び出しているだけですね。
本当はPowerShellにするのがモダンなやり方だと思うのですが、権限がどうこうというのが出てくるのでVBScriptにしてしまいました。
VBScriptをタスクスケジューラに登録する場合は、「プログラム/スクリプト」にwscript.exeを指定して、「引数の追加」に実行するスクリプトファイルを記入します。
一応、これでタスクスケジューラが裏でファイルのバックアップをしてくれます。
公開日