Contents
指定したパスにフォルダを作成します。親フォルダが存在しなくても作成することができます。
FileSystemObjectオブジェクトのFSO.CreateFolder メソッドで親フォルダが存在しないと作成できない点を改良した関数です。
この関数を使えば親フォルダが存在しなくてもエラーを出さずにフォルダを生成することができます。
パスは絶対パスまたは相対パスで指定します。
- 構文
- CreateFolders( folderspec )
- 引数
- folderspec 必須
- 作成するフォルダのパス
- 戻り値
プログラム
//////////////////////////////////////////////////
// 【引数】
// folderspec : 作成するフォルダのパス
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE CreateFolders(folderspec)
WITH CREATEOLEOBJ("Scripting.FileSystemObject")
folderspec = .GetAbsolutePathName(folderspec)
IF !.DriveExists(.GetDriveName(folderspec)) THEN EXIT
DIM parentPath = .GetParentFolderName(folderspec)
IF !.FolderExists(parentPath) THEN CreateFolders(parentPath)
IF !.FolderExists(folderspec) THEN .CreateFolder(folderspec)
ENDWITH
FEND
解説
- 2,8行目
- FileSystemObject オブジェクトを生成し、WITH文の中ではオブジェクトの記述を省略します。
WITH CREATEOLEOBJ("Scripting.FileSystemObject") … ENDWITH
- 3行目
- folderspecが相対パスならば絶対パスに変換し再代入します。
folderspec = .GetAbsolutePathName(folderspec)
- 4行目
- folderspecのドライブが存在しなければ終了します。
IF !.DriveExists(.GetDriveName(folderspec)) THEN EXIT
- 5行目
- folderspecの親フォルダ名をparentPathに代入します。
DIM parentPath = .GetParentFolderName(folderspec)
- 6行目
- parentPathにフォルダが存在しなければCreateFoldersを再帰呼び出しします。
IF !.FolderExists(parentPath) THEN CreateFolders(parentPath)
- 7行目
- folderspecにフォルダが存在しなければ作成します。
IF !.FolderExists(folderspec) THEN .CreateFolder(folderspec)
使い方
C:\Work\sample\にフォルダを作成します。
CreateFolders("C:\Work\sample\")
デスクトップ\aaa\bbb\cccにフォルダを作成します。
CONST ssfDesktop = 0
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
CreateFolders(Folder.Self.Path + "\aaa\bbb\ccc")
プログラム実行例
指定期間に受信したメールの添付ファイルをすべて保存(Outlook)
使用関数
解説
都道府県フォルダを作成
名前順にしたとき都道府県コード順になるよう、先頭には01_北海道のように2桁で都道府県コードを記載。
都道府県コードはJIS X 0401都道府県コード - CyberLibrarianを参照。
CONST olFolderInbox = 6
DIM Outlook = CREATEOLEOBJ("Outlook.Application")
DIM NameSpace = Outlook.GetNameSpace("MAPI")
DIM Folder = NameSpace.GetDefaultFolder(olFolderInbox)
DIM Items = Folder.Items
DIM start = "2021/01/01"
DIM end = "2021/01/31"
Items = Items.Restrict("[ReceivedTime] >= '" + start + "' AND [ReceivedTime] <= '" + end + "'")
DIM folderspec = "D:\Desktop\Outlook\"
CreateFolders(folderspec)
DIM row = 1
FOR MailItem IN Items
FUKIDASI(row + "/" + Items.Count)
FOR i = 1 TO MailItem.Attachments.Count
DIM Attachment = MailItem.Attachments.Item(i)
DIM path = folderspec + Attachment
path = uniqueFilename(path)
Attachment.SaveAsFile(path)
PRINT path
NEXT
row = row + 1
NEXT
//////////////////////////////////////////////////
// 【引数】
// folderspec : 作成するフォルダのパス
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE CreateFolders(folderspec)
WITH CREATEOLEOBJ("Scripting.FileSystemObject")
folderspec = .GetAbsolutePathName(folderspec)
IF !.DriveExists(.GetDriveName(folderspec)) THEN EXIT
DIM parentPath = .GetParentFolderName(folderspec)
IF !.FolderExists(parentPath) THEN CreateFolders(parentPath)
IF !.FolderExists(folderspec) THEN .CreateFolder(folderspec)
ENDWITH
FEND
//////////////////////////////////////////////////
// 【引数】
// path : ファイルのパス
// 【戻り値】
// 重複しないファイル名
//////////////////////////////////////////////////
FUNCTION uniqueFilename(path)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
IFB FSO.FileExists(path) THEN
DIM fol = FSO.GetParentFolderName(path)
DIM filename = FSO.GetBaseName(path)
DIM extension = FSO.GetExtensionName(path)
DIM i = 2
WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension))
i = i + 1
WEND
RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension)
ELSE
RESULT = path
ENDIF
FEND
使用関数
この記事は役に立ちましたか?
ご協力ありがとうございます。
関連記事
- Shell.Explore メソッド
- 指定したディレクトリをエクスプローラで開きます。
- Folder オブジェクト
- フォルダのすべてのプロパティにアクセスできます。
- getFileList (自作関数)
- サブフォルダを含めたファイル一覧を配列で返します。
- Shell.Open メソッド
- 指定したディレクトリをエクスプローラで開きます。
- Folder オブジェクト
- シェルフォルダを表します。
- Folder.CopyHere メソッド (Shell)
- 1つまたは複数のアイテムをフォルダにコピーします。
- Folder.GetDetailsOf メソッド (Shell)
- フォルダ内のアイテムに関する詳細を取得します。
- Folder.Items メソッド (Shell)
- フォルダ内のアイテムのコレクションを表すFolderItems オブジェクトを取得します。
- Folder.MoveHere メソッド (Shell)
- 1つまたは複数のアイテムをこのフォルダに移動します。
- Folder.ParseName メソッド (Shell)
- 指定されたアイテムのFolderItem オブジェクトを作成して返します。