せっかく書いたのに、操作を誤ってデータを消してしまったら、がっかりですよね。
そこで僕が Windows で行なっている方法を紹介します。
cmd.exe の XCOPY コマンドを使って、現在作業中のディレクトリを、外部ストレージにバックアップします。
dirname1 に保存したいディレクトリを、dirname2に保存先を指定します。
/D オプションをつけると、前回のバックアップから更新があったファイルか新規ファイルだけをコピーの対象にします。
/S オプションをつけると、ディレクトリツリーごとコピーします。
とりあえず、ディレクトリツリーを隠しファイル(システムファイル)も含めて丸ごとコピーしてみましょう。
xcopy /D /S /H /Y dirname1 dirname2
オプションはそれぞれ D=更新されたものだけコピー, S=サブディレクトリをコピー, H=隠しファイルもコピー, Y=上書き確認メッセージ無し の意味。
これを手動で行なってもいいのですが、ループを使って自動でやってみたいと思います。
たとえば 300 秒毎に XCOPY を実行するようにバッチファイルを作ります。
Windows XP の cmd (98の場合は msdos-prompt) には、「待つ」というコマンドがありません。そこで代わりに PING コマンドを使います。書式はこんなのです。
ping localhost -l 0 -n 300 >nul
この例だと、300 秒毎にデータサイズ0バイトで ping を自分に打ち、結果を出力しません。したがって何の意味もない処理です。これによってタイムラグの少ない 300 秒の間があきます。これをループに組み込みます。
例の 300 という部分を %1 に変えると、実行時に引数でウェイトの秒数を指定できます。つまりバッチファイル名が foo.bat だったら、foo.bat 600 として実行すると、ウェイトは 600 秒になります。定数にするか変数にするかは好みで決めてください。
バッチは以下のようになります。
@echo off
:BEGIN
echo @ %DATE% %TIME%
xcopy /D /S /H /Y C:\dirname1 E:\dirname2
ping localhost -l 0 -n 300 >nul
GOTO BEGIN
ECHO を使って、標準出力に XCOPY 実行時の日付と時刻を表示しています。人によっては %TIME% %DATE% の順だったり、%TIME% のみであったりした方が見やすいかもしれません。
とりあえず意味を把握せずコマンドを使うのは危険なので、これに限らず、どういう処理か承知した上で実行してください。