CreateFoldersクリエイトフォルダーズ

指定したパスにフォルダを作成します。親フォルダが存在しなくても作成することができます。

FileSystemObjectオブジェクトのFSO.CreateFolder メソッドで親フォルダが存在しないと作成できない点を改良した関数です。

この関数を使えば親フォルダが存在しなくてもエラーを出さずにフォルダを生成することができます。

パスは絶対パスまたは相対パスで指定します。

構文
CreateFolders( folderspec )
引数
folderspec 必須
作成するフォルダのパス
戻り値

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   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

解説

  1. 2,8行目
    UWSC
    	WITH CREATEOLEOBJ("Scripting.FileSystemObject")
    		…
    	ENDWITH
    FileSystemObject オブジェクトを生成し、WITH文の中ではオブジェクトの記述を省略します。
  2. 3行目
    UWSC
    		folderspec = .GetAbsolutePathName(folderspec)
    folderspecが相対パスならば絶対パスに変換し再代入します。
  3. 4行目
    UWSC
    		IF !.DriveExists(.GetDriveName(folderspec)) THEN EXIT
    folderspecのドライブが存在しなければ終了します。
  4. 5行目
    UWSC
    		DIM parentPath = .GetParentFolderName(folderspec)
    folderspecの親フォルダ名をparentPathに代入します。
  5. 6行目
    UWSC
    		IF !.FolderExists(parentPath) THEN CreateFolders(parentPath)
    parentPathにフォルダが存在しなければCreateFoldersを再帰呼び出しします。
  6. 7行目
    UWSC
    		IF !.FolderExists(folderspec) THEN .CreateFolder(folderspec)
    folderspecにフォルダが存在しなければ作成します。

使い方

C:\Work\sample\にフォルダを作成します。

UWSC
CreateFolders("C:\Work\sample\")

デスクトップ\aaa\bbb\cccにフォルダを作成します。

UWSC
CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
CreateFolders(Folder.Self.Path + "\aaa\bbb\ccc")

プログラム実行例

指定期間に受信したメールの添付ファイルをすべて保存(Outlook)

UWSC
使用関数
解説

都道府県フォルダを作成

名前順にしたとき都道府県コード順になるよう、先頭には01_北海道のように2桁で都道府県コードを記載。

都道府県コードはJIS X 0401都道府県コード - CyberLibrarianを参照。

UWSC
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 オブジェクトを作成して返します。