2.8 フォルダやファイルのコピー
 ファイルやフォルダをコピーするときの方法です。まず、ファイルのコピーを行うにはファイルシステムオブジェクトのCopyFileメソッドを使います。次にフォルダのコピーですが、こっちはファイルシステムオブジェクトのCopyFolderメソッドで行います。

 なお、このメソッドを使うとアンチウィルスが悪さをしたと勘違いし「ウィルスかもしれません!」なんて警告メッセージが出るかも知れません。
使用例
 ファイルやフォルダのコピーの例です。

 例は、IP Messengerでやりとりした会話を記録したログファイル(c:\Program Files\ipmsg\ipmsg.log)とマイドキュメントフォルダを、c:\backupというフォルダにコピーするというプログラムです。

 ところで、マイドキュメントフォルダのパスの指定ですが、マイドキュメントフォルダのターゲットフォルダは自由に変えることができます。ということは、人によってバラバラだったりすることがあるので、固定でパスを指定するというのはいまいち。なので、マイドキュメントフォルダのパスはスペシャルフォルダ(1.6 スペシャルフォルダを参照)という情報から得るようにしています。

 さて、まずはIP Messengerの会話ログファイルのコピー(バックアップ)ですが、こいつはEのCopyFileメソッドで行っています。CopyFileメソッドには、コピー元とコピー先のファイルを指定します。コピー元ファイルに存在しないファイルを指定するのはダメ(エラー)で、コピー先ファイルはあっても無くてもOK!ただし、コピー先に同じファイル名があると、そのファイルは上書きされてしまうので注意!
 ちなみに、会話ログファイルをバックアップしたときは、ついでに元のファイルをカラッポにする処理も行っています。たまにクリアしないと溜まる一方だよね、あれって(笑)。ファイルをカラッポにする処理はEで行っています。ファイルを上書きモードでオープンして、何もせずクローズするだけです。

 次に、マイドキュメントフォルダのバックアップですが、こいつはGのCopyFolderメソッドで行っています。コピー元とコピー先はフォルダ名を指定します。こいつも、コピー元フォルダに存在しないフォルダを指定するのはダメ(エラー)で、コピー先のフォルダはあっても無くてもOK!ただし、コピー先のフォルダが既にあるとき、中のファイルはコピー元フォルダ内の同じ名前のファイルで上書きされてしまうので注意!

 あっっっっっ!もしかすると、IP Messengerのログファイルも人によってバラバラかもしれない(汗)。でも、これはc:\Program Files\ipmsg\ipmsg.logだっつーことにしておこうかな…(笑)

 ■VBScriptの記述例
Option Explicit

'定数の宣言
Const ForReading = 1 '読み込み
Const ForWriting = 2 '書きこみ(上書きモード)
Const ForAppending = 8 '書きこみ(追記モード)

Dim objFileSys
Dim objOutFile
Dim objShell
Dim strCopyFrom
Dim strCopyTo
Dim strDate

'@ファイルシステムオブジェクトを作成します
Set objFileSys = CreateObject("Scripting.FileSystemObject")

'AWScriptシェルオブジェクトを作成します
Set objShell = CreateObject("WScript.Shell")

'B現在日付をYYMMDD形式で取得します
strDate = CStr(Right("00" & Year(Date),2) & _
          Right("00" & Month(Date),2) & _
          Right("00" & Day(Date),2))

'==============================================================
'= ファイルのコピー
'==============================================================
'Cコピー元とコピー先のファイル名を変数に設定
' コピー元はIP Messengerのログファイルです
strCopyFrom = "c:\Program Files\ipmsg\ipmsg.log"
strCopyTo = objFileSys.BuildPath("c:\backup\ipmsglogs",strDate & "ipmsg.log")

'Dログファイルのコピー(バックアップ)を行います
objFileSys.CopyFile strCopyFrom,strCopyTo

'Eログファイルをクリア
' ファイルを上書きモードでオープンし何もせずクローズしクリアするだけ
Set objOutFile = objFileSys.OpenTextFile(strCopyFrom,ForWriting)
objOutFile.close

'==============================================================
'= フォルダのコピー
'==============================================================
'Fコピー元とコピー先のフォルダ名を変数に設定
' コピー元はマイドキュメントフォルダです
strCopyFrom = objShell.SpecialFolders("MyDocuments")
strCopyTo = objFileSys.BuildPath("c:\backup",strDate & "MyDocuments")

'Gフォルダのコピー(バックアップ)を行います
objFileSys.CopyFolder strCopyFrom,strCopyTo

'Hオブジェクトの破棄
Set objFileSys = Nothing
Set objOutFile = Nothing
Set objShell = Nothing

 ■JScript(JavaScript)の記述例
//定数の宣言
var ForReading = 1; //読み込み
var ForWriting = 2; //書きこみ(上書きモード)
var ForAppending = 8; //書きこみ(追記モード)

var objFileSys;
var objOutFile;
var objShell;
var strCopyFrom;
var strCopyTo;
var strDate;

//@ファイルシステムオブジェクトを作成します
objFileSys = new ActiveXObject("Scripting.FileSystemObject");

//AWScriptシェルオブジェクトを作成します
objShell = new ActiveXObject("WScript.Shell");

//B現在日付をYYMMDD形式で取得します
strDate = getTime();

//==============================================================
//= ファイルのコピー
//==============================================================
//Cコピー元とコピー先のファイル名を変数に設定
// コピー元はIP Messengerのログファイルです
strCopyFrom = "c:\\Program Files\\ipmsg\\ipmsg.log";
strCopyTo = objFileSys.BuildPath("c:\\backup\\ipmsglogs",strDate + "ipmsg.log");

//Dログファイルのコピー(バックアップ)を行います;
objFileSys.CopyFile(strCopyFrom,strCopyTo);

//Eログファイルをクリア
// ファイルを上書きモードでオープンし何もせずクローズしクリアするだけ
objOutFile = objFileSys.OpenTextFile(strCopyFrom,ForWriting);
objOutFile.close();

//==============================================================
//= フォルダのコピー
//==============================================================
//Fコピー元とコピー先のフォルダ名を変数に設定
// コピー元はマイドキュメントフォルダです
strCopyFrom = objShell.SpecialFolders("MyDocuments");
strCopyTo = objFileSys.BuildPath("c:\\backup", strDate + "MyDocuments");

//Gフォルダのコピー(バックアップ)を行います
objFileSys.CopyFolder(strCopyFrom,strCopyTo);

//Hオブジェクトの破棄
objFileSys = null;
objOutFile = null;
objShell = null;

function getTime() {
    //時刻を編集します
    var objDate = new Date();
    return objDate.getHours() + "_" + objDate.getMinutes() + "_" + objDate.getSeconds();
}
Copyright(C) 1999-2006 結城圭介。 All rights reserved