2.11 フォルダやファイルの有無を調べる
 ファイルやフォルダの有無を調べるときの方法です。ファイルの有無を調べるときはファイルシステムオブジェクトのFileExistsメソッドを使います。フォルダの有無を調べるときは、ファイルシステムオブジェクトのFolderExistsメソッドで行います。

 なお、このメソッドを使うとアンチウィルスが悪さをしたと勘違いし「ウィルスかもしれません!」なんて警告メッセージが出るかも知れません。
使用例
 ファイルやフォルダの有無を調べる例です。例は、新しくファイルやフォルダを作るとき作ろうとしたファイルが既にあるかをチェックし、作れない(=ある)時はエラーメッセージを表示しています。
 ただし、目的のファイル(フォルダ)をいきなり作らず、最初に中間名で作成し、そのあと中間名で作成したファイル(フォルダ)の名前を変更して目的のファイルにするようにしています。

 中間名称の取得(@とD)は、ファイルシステムオブジェクトのGetTempNameメソッドで取得できます。このメソッドで取得した名前はかなりランダムな内容です。もちろん、取得するたびに違います。

 ファイル(フォルダ)の有無をチェックしているところはBとFです。FolderExistsFileExists)のパラメタは、目的のファイル(フォルダ)のフルパス。結果はTrueFalseで参照し、有るときがTrue、無いときがFalseです。

 ■VBScriptの記述例
Option Explicit

Dim objFileSys
Dim strTempName
Dim strCheckPath
Dim strCreatePath

Set objFileSys = CreateObject("Scripting.FileSystemObject")

'==============================================================
'= フォルダの作成(中間フォルダ→[名前変更]→目的のフォルダ)
'==============================================================
'@中間フォルダ名の作成
strTempName = objFileSys.GetTempName
strCreatePath = objFileSys.BuildPath("c:\happy",strTempName)

'A中間名でフォルダを作成します
objFileSys.CreateFolder strCreatePath

WScript.echo "c:\happyに、中間フォルダ" & strTempName & "を作成しました。"

'目的のフォルダのパスを作成
strCheckPath = objFileSys.BuildPath("c:\happy","logfiles")

'BFolderExistsでフォルダの有無チェック
If objFileSys.FolderExists(strCheckPath) = True Then
'C目的のフォルダがある(=true)ときは、その旨のメッセージを表示し中間フォルダを削除
   WScript.echo "c:\happyに、logfilesというフォルダがあるため" & _
                "フォルダ logfiles が作成できませんでした"
   objFileSys.DeleteFolder strCreatePath
Else
'C目的のフォルダが無い(=false)ときは、中間フォルダの名前を変更し目的のフォルダにする
   objFileSys.MoveFolder strCreatePath,strCheckPath
   WScript.echo "中間フォルダ" & strTempName & "の名前を変更し、" & _
                "c:\happyにフォルダ logfiles を作成しました"
End If

'==============================================================
'= ファイルの作成(中間ファイル→[名前変更]→目的のファイル)
'==============================================================
'D中間ファイル名の作成
strTempName = objFileSys.GetTempName
strCreatePath = objFileSys.BuildPath("c:\happy",strTempName)

'E中間名でファイルを作成します
objFileSys.CreateTextFile strCreatePath

WScript.echo "c:\happyに、中間ファイル" & strTempName & "を作成しました。"

'目的のファイルのパスを作成
strCheckPath = objFileSys.BuildPath("c:\happy","DataFile.dat")

'FFileExistsでフォルダの有無チェック
If objFileSys.FileExists(strCheckPath) = True Then
'G目的のファイルがある(=true)ときは、その旨のメッセージを表示し中間ファイルを削除
   WScript.echo "c:\happyに、DataFile.datというファイルがあるため、" & _
                "ファイル DataFile.dat が作成できませんでした"
   objFileSys.DeleteFile strCreatePath
Else
'H目的のファイルが無い(=false)ときは、中間ファイルの名前を変更し目的のファイルにする
   objFileSys.MoveFile strCreatePath,strCheckPath
   WScript.echo "中間ファイル" & strTempName & "の名前を変更し、" & _
                "c:\happyにファイル DataFile.dat を作成しました"
End If

Set objFileSys = Nothing

 ■JScript(JavaScript)の記述例
var objFileSys
var strTempName
var strCheckPath
var strCreatePath

objFileSys = new ActiveXObject("Scripting.FileSystemObject");

//==============================================================
//= フォルダの作成(中間フォルダ→[名前変更]→目的のフォルダ)
//==============================================================
//@中間フォルダ名の作成
strTempName = objFileSys.GetTempName();
strCreatePath = objFileSys.BuildPath("c:\\happy",strTempName);

//A中間名でフォルダを作成します
objFileSys.CreateFolder(strCreatePath);

WScript.echo("c:\\happyに、中間フォルダ" + strTempName + "を作成しました。");

//目的のフォルダのパスを作成
strCheckPath = objFileSys.BuildPath("c:\\happy","logfiles");

//BFolderExistsでフォルダの有無チェック
if (objFileSys.FolderExists(strCheckPath)==true) {
//C目的のフォルダがある(=true)ときは、その旨のメッセージを表示し中間フォルダを削除
   WScript.echo("c:\\happyに、logfilesというフォルダがあるため" +
                "フォルダ logfiles が作成できませんでした");
   objFileSys.DeleteFolder(strCreatePath);
} else {
//C目的のフォルダが無い(=false)ときは、中間フォルダの名前を変更し目的のフォルダにする
   objFileSys.MoveFolder(strCreatePath,strCheckPath);
   WScript.echo("中間フォルダ" + strTempName + "の名前を変更し、" +
                "c:\\happyにフォルダ logfiles を作成しました");
}

//==============================================================
//= ファイルの作成(中間ファイル→[名前変更]→目的のファイル)
//==============================================================
//D中間ファイル名の作成
strTempName = objFileSys.GetTempName();
strCreatePath = objFileSys.BuildPath("c:\\happy",strTempName);

//E中間名でファイルを作成します
objFileSys.CreateTextFile(strCreatePath);

WScript.echo("c:\\happyに、中間ファイル" + strTempName + "を作成しました。");

//目的のファイルのパスを作成
strCheckPath = objFileSys.BuildPath("c:\\happy","DataFile.dat");

//FFileExistsでフォルダの有無チェック
if (objFileSys.FileExists(strCheckPath)==true) {
//G目的のファイルがある(=true)ときは、その旨のメッセージを表示し中間ファイルを削除
   WScript.echo("c:\\happyに、DataFile.datというファイルがあるため、" +
                "ファイル DataFile.dat が作成できませんでした");
   objFileSys.DeleteFile(strCreatePath);
} else {
//H目的のファイルが無い(=false)ときは、中間ファイルの名前を変更し目的のファイルにする
   objFileSys.MoveFile(strCreatePath,strCheckPath);
   WScript.echo("中間ファイル" + strTempName + "の名前を変更し、" +
                "c:\\happyにファイル DataFile.dat を作成しました");
}

objFileSys = null;
Copyright(C) 1999-2006 結城圭介。 All rights reserved