サバのトランク

コンピュータの記事を中心に

バッチファイルによるバックアップ ③ 「ログファイル」を残す

ファイルを表示したモニタ

【訂正】2024/8/28に内容を一部訂正しました。(ログファイルをフルパスで記述)

2024年4月に、
バッチファイルとタスクスケジューラによるデータバックアップ手法 ①、②」
の記事を書きました。

 
⬇️「記事①」バッチファイルの作成まで

⬇️「記事②」タスクスケジューラを使って、指定の時刻に自動でバックアップさせる

 

今回はタスクスケジューラは絡まない話なので、題名を短くしましたが、続きの「記事③」ということで、バックアップ時に「ログファイル」を残す方法を追加していきたいと思います。

「記事①」で作成したバッチファイルを改良していく形になるので、基本的には「記事①」を読まれていることを前提にして書いています。

 

「記事①」のバッチファイル

「記事①」で作成した、バッチファイルの中身は以下のようなものでした。

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

このバッチファイルには、"robocopy" という Windowsのコマンドを使って、
Dドライブの "サバdata" フォルダを、Eドライブと、Zドライブの "サバdata" フォルダに「差分コピー」するコマンドが書かれています。

また、Eドライブには、"/MIR" オプションで同じファイル構成にするミラーリングを、Zドライブには、"/E" オプションで「追記」を行うというものでした。

"/MIR" , "/E" オプションの詳細については「記事①」「バッチファイルの中身の詳しい説明」を参照してください)

ただ、上記のバッチファイルでは、画面にフォルダ名やコピーされたファイル名が表示されるだけで、「ログファイル」は残していませんでした。

今回は、この「ログファイル」を残そうということです。

 

この記事のベースとなるバッチファイル

「記事①」で作成したバッチファイルは、Dドライブから、 Eドライブと Zドライブの2カ所にコピーするものでしたが、この記事では単純にするために、
「Dドライブから Eドライブへコピーする」だけ
にしたいと思います。

バッチファイルの中身としては、Zドライブに関する2行目を削っただけです。⬇️

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

 

ログファイルを作成する

上記のバッチファイルに、ログファイルを作成するようにオプション(パラメーター)を加えます。
pause コマンドは、終了後に画面を止めるためのものなので、とりあえず除いておきます)

新しいバッチファイル⬇️

robocopy d:\サバdata e:\サバdata /MIR /FFT /XO /XA:SH /R:0 /W:0 /NP /LOG:D:\サバBackUp.Log /TEE

 
最後に "/LOG:D:\サバBackUp.Log /TEE" を加えました。

/LOG:<ログファイル名> で、 ログファイルを作成します。
この例では、D:ドライブのルート(\) に "サバBackUp.Log" というログファイルが作成されます。( D:\サバBackUp.Log 

または、ユーザーフォルダ(この例では "C:\Users\savan" )にログファイルを作るなら、
/LOG:C:\Users\savan\サバBackUp.Log ( \savan の部分は人それぞれです)
のように書いてください。

いずれにせよ、必ずフルパスドライブ名から始まるファイルまでの経路)でファイル名を書いてください。

( D:\サバBackUp.Log や C:\Users\savan\サバBackUp.Log がフルパスでの表記)

 

(ログファイルの名前は何でも構いませんが、拡張子は ".Log" とした方が良いでしょう)(大文字小文字は関係ありません。.log でも .LOG でも問題なし)

/TEE で、画面とログファイルの両方に出力結果が表示・記録されます。

★★ まだ未完成です。次へ ⬇️

 

フォルダが多すぎる

上記のバッチファイルで、ログファイルは作成されるのですが、例えば大量のサブフォルダが存在するデータフォルダのバックアップを取った時など、コピーされないサブフォルダ名も表示されるので、画面もログファイルも大量のサブフォルダ名で埋め尽くされてしまいます。

例えば、私のデータフォルダの場合だと⬇️

大量のフォルダ名

画面いっぱいに表示されているのは、データフォルダの中のサブフォルダ名です。左端に行番号がありますが、最終的には2,000行を超えます。
そしてこの画面にあるサブフォルダの中身は、更新されたファイルが無ければ、コピーされるわけでもありません

 

コピーされたファイル名だけ表示・記録する

このバッチファイルは、バックアップのために「更新されたファイルだけ」(差分)コピーしています。
更新されたファイル名だけが表示・記録されると良いわけなので、バッチファイルにさらにオプションを加えていきます。

新しいバッチファイル⬇️

robocopy d:\サバdata e:\サバdata /MIR /FFT /XO /XA:SH /R:0 /W:0 /NP /LOG:D:\サバBackUp.Log /TEE /NDL

 
最後に "/NDL" を加えました。
これは、ディレクトリ名をログに記録しないことを指定」するオプションです。
ディレクトとはフォルダの事です。
これでフォルダ名は(サブフォルダ名も含めて)表示されなくなりました。

★★ まだ未完成です。次へ ⬇️

 

バッチファイル完成(画面とログファイルの両方に出力)

これで、とりあえずバッチファイルは完成します
「メモ帳」などを使って、下記のバッチファイルをコピーし、適当なファイル名をつけてテキストファイルとして保存します。

------- この下の行からコピー -------
robocopy d:\サバdata e:\サバdata /MIR /FFT /XO /XA:SH /R:0 /W:0 /NP /LOG:D:\サバBackUp.Log /TEE /NDL
pause
------- この上の行までコピー -------

⬇️ 下記の注意点を確認してください! ⬇️

★★★

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

メモ帳で保存はANSIで

★★★

 

テキストファイルが完成したら、その後拡張子( "." (ドット)より後の文字)を "txt" から ”bat" (または "cmd" )に変更してください。

(例えば、"savaBackUp.bat" などというファイル名にするということです。)
(拡張子などの詳細や、バッチファイルの編集方法などについては「記事①」を参照してください)⬇️

savatrunk.com

 

バッチファイル実行(画面とログファイルの両方に出力)

今回は、"d:\サバdata" の中に "宇宙壁紙" というフォルダがあり、その中に4つの画像ファイルが存在するという例で示します。

コピー元の画像ファイル

ここで、完成したバッチファイルを実行してみます。
コマンドプロンプトという黒いウィンドウが開き、文字が表示されるはずです。下記のように表示され、またログファイルにも記録されていれば成功です。


コマンドプロンプトの表示⬇️

バッチファイル実行後コマンドプロンプト

ログファイル( "サバBackUp.Log" )の内容⬇️

ログファイルの内容

コマンドプロンプトにも表示され、ログファイルにも記録されてバックアップは成功しました。
どちらも、余分なフォルダ名は無く、コピーされたファイル名だけが表示されています。

 

ログファイルの「上書き」と「追記」

"/LOG:" オプションですが、そのままの

"/LOG:<ログファイル名>" であれば、既存の「ログファイル」は毎回「上書き」されます。

"/LOG" の後に "+" を付けて、

"/LOG+:<ログファイル名>" とすれば、既存の「ログファイル」に「追記」されます。

 

コマンドプロンプトについて ★

バッチファイルをマウスクリックで実行すると、コマンドプロンプトが起動し、その中でバッチファイルに書かれたコマンドが順次実行されていきます。
下のスクリーンショットのように、突然黒いウィンドウが開いて、文字が次々と流れていくので、初めて見るとびっくりするかもしれません。⬇️

コマンドプロンプトの例

コマンドプロンプトは、WindowsGUI(グラフィカル・ユーザー・インターフェイス 通常の操作)ではなく、テキストベースのCUI(キャラクター・ユーザー・インターフェイス)でコマンドを入力してコンピュータを操作するためのツール(インターフェイス)です。

ここではこれ以上深入りしませんが、もう少し知りたい方は下記の記事を参照してみてください。⬇️

 

ここまで「記事③」のまとめ

この「記事③」で、ログファイルを残す形のバッチファイルが作成できました。
時刻等を指定してバックアップを自動実行したい場合は、「記事②」を参照して、タスクスケジューラを利用してみてください。

次の「記事④」では、細かい点の説明と、英語モードを使って出力の整列をおこなっています⬇️

 

2024/8/27に内容を一部訂正しました。(ログファイルをフルパスで記述等の詳細はこちらの記事参照)この記事の内容は訂正済みです。⬇️

savatrunk.com