サバのトランク

本やコンピュータや病気のことなど *当ブログではアフィリエイト広告を利用しています*

バッチファイルとタスクスケジューラによるデータバックアップ手法 ①

コマンドプロンプトのイメージ

★★★ Windowsに関する記事です ★★★ 

ずっと以前から書こうと思っていたテーマなのですが、私が10数年前からやっている、バッチファイルタスクスケジューラによるデータのバックアップの紹介です。
その ① として、この記事の内容は、バックアップを行う為のバッチファイルの作成までです。

スクリーンショット等は Windows11の画面です。Windows10では若干表示画面や操作が異なる場面がありますが、ほぼ同じ操作が可能です)

 

バックアップの方法

Windowsのバックアップ

Windows11,10には3種類のバックアップが標準で備わっています。
Windowsバックアップ」(OneDriveを使ったアプリ)
「ファイル履歴」
「バックアップと復元(Windows7)」

「バックアップと復元(Windows7)」は、Windowsを再インストールする時には特に役に立ちます。それ以外のアプリも使ってはいますが、私にはあまり使い勝手が良いとは思えません。

 

バッチファイルとタスクスケジューラによるバックアップの利点

冒頭にも書きましたが、私はずっと以前からバッチファイルとタスクスケジューラによるデータのバックアップを行っています。
こう書くとなんだか難しそうに思えるかもしれませんが、単に自動的にファイルのコピーをしているだけです。

この方法の利点は、以下のような点です。
・複数のドライブにバックアップできる。
・圧縮などをせずに、単純にコピーするだけなので、NAS(ネットワークドライブ)にファイルをバックアップしておけば、複数のPCからファイルにアクセスできる。
・自作のバッチファイルを使うので、フォルダの選択等自分の思う通り自由に調整可能。

 

データドライブの構成

システムとデータドライブの分離のすすめ

Cドライブに、Windowsのシステムと共に自分のデータを入れておくと、Windowsシステムにトラブルがあったり、物理的にCドライブが故障したりした時に、データも一緒に失われてしまう可能性が高くなってしまいます

そこで、私は以前から、自分のデータは Dドライブに保存し、なおかつ増設した物理的な別ドライブや、NAS(ネットワークドライブ)にバックアップを取るという方法を取っています。
(ずっと以前にHDDの故障でデータを失ったことがあり、それ以来慎重にデータのバックアップを取るようになりました)

 

この記事に適応するドライブ構成

この記事では、C, D, E, Z の4つのドライブで運用する例を示します。

(少なくとも2つ以上のドライブがあれば、応用可能な内容にはなっています)

本来は、C, D, E, Z ともに別の物理ドライブであるのがベストだと思うのですが、2024年1月に購入したミニPCでは1台目のM.2 SSDが1TBであったため、これを分割して、 Cドライブ(300GB)と Dドライブ(651GB)とし、SATA SSD(1TB)を増設し Eドライブとしています。⬇️

savatrunk.com

また、3TB HDDの NASを設置しており、これを Windowsからは「ネットワークドライブの割り当て」で、Zドライブに設定しています。

C:Windowsシステム(300GB)
D:データドライブ(651GB)
E:バックアップドライブ(1TB)
Z:NAS(ネットワークドライブ)(3TB)⬇️

ドライブ構成

バックアップの準備

バックアップの方針

今回の例としては、

D:\サバdata

フォルダを

E:\サバdata
Z:\サバdata

にバックアップする例を示します。

 

Dドライブにバックアップデータを準備する

私の場合は、基本的にデータは Dドライブに保存しています。
その中でも、バックアップを取っておきたいデータを、特定のフォルダに保存しています。
今回は仮に "サバdata" という事にして説明していきます。

Dドライブのルート(一番上の階層)に "サバdata" というフォルダを作ります。⬇️

Dドライブの内容


"サバdata" の下には1つだけ「宇宙壁紙」というフォルダがあります。⬇️

フォルダの内容

 

宇宙壁紙には 3つのJPGファイルが保存されています。⬇️

宇宙壁紙の中身

 

バッチファイルの準備

バッチファイルについて

次に、バッチファイルを作ります。
バッチファイルなんて、見たことも聞いたこともないという方も多いかもしれませんが、コンピュータに対してコマンド(命令)をまとめて実行(バッチ処理)させる為のテキストファイルです。
(バッチファイルそのものの詳細については、ここではこれ以上深入りしません)

今回作るのは、中身が3行だけという簡単なバッチファイルです。

 

「ファイル名拡張子」の表示

Windowsでは、デフォルトで「ファイル名拡張子」が非表示となっているので、これを表示させておきます。(「ファイル名拡張子」とは、ファイルの種類を示す文字で、ファイル名の ”.” の後ろに付きます。txt  doc  bat  pdf  xlsx  jpg 等々 )
エクスプローラ(PCアイコンや任意のフォルダ)を開き、上の方のメニューバーにある「表示」をクリック、出てきたプルダウンメニューの一番下の「表示」にマウスカーソルを置き、「ファイル名拡張子」にチェックを入れます。⬇️

拡張子を表示させる

 

テキストファイルの作成

ここでの例では、Dドライブのルート(一番上の階層)にバッチファイルを作成します。

「メモ帳」や、その他のテキストエディタを開いて、下記の3行をコピーし、"BackUpD2EZ" などのファイル名で、Dドライブのルートに保存してください。
ファイル名は何でもかまいません。大文字小文字も関係なしです。
とりあえずは、拡張子は "txt" のままで大丈夫です。
(普通に保存すれば、拡張子は "txt" になります)

------- この下の行からコピー -------
robocopy d:\サバdata e:\サバdata /MIR /FFT /XO /XA:SH /R:0 /W:0 /NP
robocopy d:\サバdata z:\サバdata /E /FFT /XO /XA:SH /R:0 /W:0 /NP
pause
------- この上の行までコピー -------

「名前を付けて保存」をすると、

BackUpD2EZ.txt

などという名前の、テキストファイルができているはずです。

(例えば、Zドライブが無く、C, D の2つのドライブ、または C, D, E の3つのドライブで運用する場合は、1行目と3行目をコピーし、下記の説明を参照し、必要に応じて内容を書き変えてください)

(続きの記事である、「バッチファイルとタスクスケジューラによるデータバックアップ手法 ②」も参照してみてください)

 

テキストファイルの中身の簡単な説明

テキストファイるの1行目と2行目は、d:\サバdata フォルダを Eドライブの e:\サバdata フォルダと Zドライブの z:\サバdata フォルダにコピーする robocopy という Windowsのコマンドです。
コピー元:d:\サバdata フォルダ
コピー先:e:\サバdata フォルダ
コピー先:z:\サバdata フォルダ
当然、コピー元とコピー先のフォルダ名は自由に設定してかまいません。
コピー元とコピー先のフォルダ名が違っていても大丈夫です。

3行目の pause は、バッチ処理を一時停止させるコマンドです。
これが無いと、実行画面がすぐに消えてしまい、バックアップ処理の確認ができなくなってしまいます。

 

テキストファイルをバッチファイルに変更する

完成したファイルのファイル名拡張子( "." (ドット)より後の文字)を txt から bat cmd でも可)に変更してください。
(アラートが出ますが、「はい」で変更します)⬇️

拡張子変更アラート

BackUpD2EZ.bat

というファイル名になりました。

これでバッチファイルになりました。⬇️

バッチファイル慣性

 

バッチファイルに関する注意点

バッチファイル保存時の注意点

「メモ帳」を使って、このバッチファイルを作成した場合に注意点があります。
ファイル名に「全角文字」(漢字、ひらがな、カナカナ)が含まれている場合には、保存するときに、
「名前を付けて保存」を選び、右下の「保存」ボタンの左側にあるエンコードANSIを選んでください。
そうしないと、漢字などが文字化けしてしまい、バッチファイルが正しく動作しません。(「文字コード」の違いから起こるエラーです)
(すべて、半角(英数字文字)の場合には、そのままUTF-8でも問題ありません。⬇️

文字コード変更ANSIへ

 

バッチファイルを編集する時の注意点

バッチファイルができた後に、中身を編集したい場合が当然あると思います。
その場合、普通のテキストファイル(.txt)の時のように、
ファイルを左クリックしないようにしてください。
ファイルを左クリックすると、いきなりバッチファイルが実行されてしまいます
バッチファイルを編集するには、ファイルを右クリックし、下の方にある「メモ帳で編集」を選び、編集してください。
(一番上の「開く」も選ばないでください。バッチファイルが実行されてしまいます)

メモ帳以外のエディタをデフォルトにしている方は、「その他のオプションを確認」から、デフォルトのエディタを選択することもできます。

 

バッチファイルの実行

上記の注意事項でよくチェックして大丈夫ならば、バッチファイルは完成ですバッチファイルを左クリックしてみてください。
このバッチファイルは、もはや単なるテキストファイルではなく、Windowsのコマンド(命令)のひとつとして働きます。
コマンドプロンプトの黒い画面が開いて、あなたが指定したコピー元フォルダにあるファイルが次々とコピーされていくのを見ることができると思います。

バッチコマンドを実行したコマンドプロンプトの画面

 

バッチファイルの中身の詳しい説明

このバッチファイルの動作説明

このバッチファイルには、Dドライブの "サバdata" フォルダを、
Eドライブと、Zドライブの "サバdata" フォルダに「差分コピー」するコマンドが書かれています。
「差分コピー」とは、新しいファイルがあった場合のみコピーするという事です。
そのため、1回目に実行したときには、"サバdata" フォルダにあるすべてのファイルをコピーしますが、2回目以降は更新されたファイルのみがコピーされます。

 

robocopy コマンド

以下に、robocopy コマンドを少し詳しく説明します。

robocopy d:\サバdata e:\サバdata /MIR /FFT /XO /XA:SH /R:0 /W:0 /NP
robocopy d:\サバdata z:\サバdata /E /FFT /XO /XA:SH /R:0 /W:0 /NP

上の行は、/MIR オプションを使って、d:\サバdata フォルダを Eドライブの e:\サバdata フォルダにミラーリングする形でコピーし、

下の行は、/E オプションを使って、d:\サバdata フォルダを Zドライブの z:\サバdata フォルダに追記する形でコピーをさせている、robocopy という Windowsのコマンドです。

ミラーリング追記については、下の robocopyコマンドのオプション参照

コピー元とコピー先のフォルダは自由に設定してかまいませんし、コピー元とコピー先のフォルダ名が違っていても大丈夫です。

(昔は xcopyコマンドを使っていましたが、後から追加された robocopyコマンド の方がはるかに高機能でスピードも速いです)

 

robocopy コマンドのオプション(パラメーター)

(オプションは、大文字でも小文字でも構いません。それぞれの間のスペースは必要です。また、必ず半角スペースにしてください)

/MIR    ディレクトリ (フォルダ)ツリーをミラー化します。
/E 空のディレクトリ(フォルダ)も含むサブディレクトリもコピーします。
/MIR を付けると、コピー元のファイルを削除すると、コピー先のファイルも削除されます(どちらも同じ状態にするミラーリングの形でコピー)。そのためコピー元のファイルを誤って削除した直後にこのオプションでバックアップが実行されると、コピー先にあったファイルも消えてしまいます)
/E を付けると、コピー元で削除したファイルもコピー先には残ります(追記する形でコピー)。こちらの方が安全と言えるかもしれません。デメリットは、コピー先のファイルは増える一方で肥大化していくこととなります)
*** このオプションは、/MIR か /E どちらかを選択してください ***

/FFT    FAT ファイル時間 (2 秒の精度) を想定します。
(FATシステムなんかもう使っていないと思われるかもしれませんが、このオプションを付けないと、NASなどのタイムスタンプの反映が遅いドライブを使っている場合に、新しいファイルだけをコピーする機能がうまく働かない場合があります)
*** このオプションは、必ず付けてください ***

/XO    宛先より古いソース ディレクトリ ファイルが、コピーから除外されます。
(Xの次の文字は、数字のゼロではなく、アルファベットの "O"(オー) です。このオプションを付けることによって、2回目以降は更新されたファイルのみがコピーされる「差分コピー」となり、大幅な時間の短縮になります)
*** このオプションは、必ず付けてください ***

/XA:SH S(システム) と H(非表示) の属性のファイルを除外します。
(システムの非表示ファイルはコピーしないという事で、普通に表示されている一般的なファイルのみをコピーするという設定です。このオプションを付けずにコピー元にSH属性のファイルがあると、バッチ処理が止まると思います。通常自分の作ったデータにはこの属性のものは無いと思いますので、除外しても良いと思います)
*** このオプションは、付けた方が良いと思います ***

/R:0   失敗したコピーの再試行回数を指定します。
(この例では、試行回数を"0" (ゼロ)回としているのでコピーが失敗しても、再試行しません。これを付けないと、コピーに失敗があった場合 100万回(デフォルトの回数)の再試行を行ってしまい、バッチ処理が実質的に止まってしまいます)
*** このオプションは、付けた方が良いと思います ***

/W:0   再試行間の待ち時間 (秒) を指定します。
(失敗したコピーの再試行の待ち時間を0秒にしています。再試行しない設定にしてあれば、無くてもかまわないと思いますが、念のため)
*** このオプションは、付けた方が良いと思います ***

/NP コピー操作の進行状況が表示されないことを示します。
(表示された方が良いように読めますが、ログを残す場合にこのオプションをつけておかないと余分な情報がログに残って見にくくなるのでその場合は必要です。今回の例ではログは残していないので、このオプションは無くてもかまいません)
*** このオプションは、この例の場合は付けなくてもかまいません ***

コマンドのオプションはもっとたくさんあります。
簡単に見るには、コマンドプロンプトを開いて、
robocopy /?
と入力してみてください。
コマンドオプションのヘルプが表示されます。

または、Microsoftのページなどにはより詳しいものがあります。

learn.microsoft.com

ここまで ① のまとめ

この の記事では、robocopyコマンドを使ったバッチファイルの作成について解説しました。

ここで作成したバッチファイルを「タスクスケジューラ」に登録して、決まった時刻に自動でバックアップをさせる方法や、少ないドライブでの運用については、次の ② で解説しています。

savatrunk.com

 

*この記事のアイキャッチ画像は、Image CreatorのAIを使用して作成しました