現役エンジニアが教える半自動で写真をバックアップする方法

写真撮影をたくさんして、PCにそのデータを移していくと結構なデータ量になってきますよね。子供との思い出を残すために毎日写真を取っている方も少なくないと思います。旅行に行った際は、私は1日100枚以上取ることもあります。できるだけ色々なものを撮影しておいて、後で整理する感じです。

私は2018年にCanon PowerShot G7 X Mark IIを購入し、ドイツで様々な写真をとってきました。もう4年近くたつので相当な量の枚数です。それにはCameraWindowというソフトウェアが付いており、それを使うことによって自動的に年月のフォルダをPCの指定した場所に作成し、未コピーの写真をそこにコピーしてくれます。

この大量のデータを外付けHDDにコピーするときに問題になってくるのがこれ。

・このファイルってもうコピーしたっけ?

これをチェックするのは正直時間の無駄で面倒。外付けHDDの対象フォルダを開いて、PC側のコピーしたいフォルダを丸ごとドラッグ・ドロップすれば、Windowsのダイアログが開き、既にあるファイルをコピーするかどうか質問してくれます。

が、コピー速度が遅いし、面倒くさい。

自動化しよ。

そんな風に思っている方は是非試してみてください。一つのファイルを実行するだけで、指定したフォルダ内の全てのデータを外付けHDDにコピーします。もちろん、既にあるファイルは無視します。

自動バックアップソフトを作成する

ITの知識を持っていない方を想定し、自動バックアップソフトの作り方を解説します。

Step1

ファイルのバックアップを取りたいと思っているフォルダを開いてください。

Step2

ファイルが存在しない箇所を右クリックし、新規作成(X) -> テキスト ドキュメント を選択してください。すると新しいファイルが「新しいテキスト ドキュメント.txt」という名前で作成されます。

Step3

ダブルクリックで、対象のファイルを開いてください。メモ帳などのテキスト編集アプリが出てきます

Step4

以下のコードをコピーし、Step3で開いたテキスト編集アプリに貼り付けてください。

SET CURRENT=%~dp0
SET LOGPATH=%CURRENT%%date:~0,2%%date:~3,2%%date:~6,4%copy.log
robocopy %CURRENT% "E:\destination" ^
/E /XO /XC /XN /NP /LOG+:%LOGPATH%
pause

Step5

「E:\destination」という箇所をコピー先のフォルダ名に変更します。外付けHDDをPC接続すると新しいドライブが表示されます。EとかFとか割り当てられますが、何が割り当てされるかはそのデバイス次第なので適宜変更してください。

robocopy %CURRENT% "E:\destination"

例えば、変更後は以下のようになります。

robocopy %CURRENT% "F:\example\pictures22"

Step6

変更を保存し、ファイルを閉じてください。

Step7

ファイルを右クリックし、下から2番にある「名前の変更(M)」を選択し、ファイル名を「copy.bat」に変更してください。

これで完了です。

copy.batの使い方と動作について

このcopy.batをダブルクリックして実行すると、そのファイルが置いてあるフォルダ内のフォルダ、ファイル、およびサブフォルダなど、全てコピーします。つまり、写真以外のファイルもコピーされます。その階層構造を維持したままコピーします。コピー先にすでに同名のファイルが存在する場合は、そのファイルはコピーされません。

Windowsのプログレスバーも出ないため、フォルダをドラッグ・ドロップするよりもはるかに高速にコピーが実行されます。もしも大量にデータが存在し、どこまでコピーしたのか確認したい場合は、同フォルダにログファイル「xxxxxxx.log」(xxxxxは日付に連動します)ができるので、それを開くとどのファイルがコピー完了したか確認できます。

特定のタイプのファイルを除外したい

ちょっと良いカメラで写真を取るとjpegファイルだけではなく、RAWデータも作成されます。このデータ以外をコピーしたいということもあると思います。その場合、「/XF」オプションを追加します。たぶん「Exclude File」の略です。

4行目に追加した\XFオプションでは、RAWデータのCR2という拡張子とlogという拡張子を除くようにしています。

SET CURRENT=%~dp0
SET LOGPATH=%CURRENT%%date:~0,2%%date:~3,2%%date:~6,4%copy.log
robocopy %CURRENT% "E:\destination" ^
/XF *.CR2 *.log ^
/E /XO /XC /XN /NP /LOG+:%LOGPATH%
pause

もし除外したいものが大量にある場合、この一行が長くなってとても見づらくなります。これを解消するために以下のように、「^」をつけて改行します。こうすることで見やすくなります。

SET CURRENT=%~dp0
SET LOGPATH=%CURRENT%%date:~0,2%%date:~3,2%%date:~6,4%copy.log
robocopy %CURRENT% "E:\destination" ^
/XF *.CR2 ^
*.log ^
*.png ^
*.txt ^
/E /XO /XC /XN /NP /LOG+:%LOGPATH%
pause

特定のフォルダを除外したい

特定のフォルダを除外したいこともあるはず。この場合、「/XD」オプションを利用します。「Exclude Directory」の略だと思います。

SET CURRENT=%~dp0
SET LOGPATH=%CURRENT%%date:~0,2%%date:~3,2%%date:~6,4%copy.log
robocopy %CURRENT% "E:\destination" ^
/XF *.CR2 *.log ^
/XD secret_folder ^
.* ^
my_folder ^
/E /XO /XC /XN /NP /LOG+:%LOGPATH%
pause

「.*」というのは「現在のフォルダと同じ階層にある全てのフォルダを除外する」ということです。ドットは現在の場所、アスタリスクは全てという意味を持ちます。

終わりに

このファイルを一度作成しておけば、簡単にバックアップを高速にとることが可能になります。毎日写真をPCに追加するけどバックアップを取るのは1週間に1度だけ、ということも簡単にできます。
一般の方だともしかすると、フォルダ構成が適当でどこに何を置いたかわからない、というケースもあるかもしれません。しかし、それらを意識せずにバックアップすることができるようになりますので、一度試してみてほしいです。
ただし、PC側でフォルダの名前を変更したり、ファイルの場所を変更したりすると、それらは同一ファイルとはみなされなくなりますのでご注意ください。

コメント

タイトルとURLをコピーしました