Folder.GetDetailsOfゲットディーテイルズオブ メソッド

本ページには広告が含まれています。

フォルダ内のアイテムに関する詳細を取得します。取得した文字列には制御文字が含まれる場合があるので、この関数で得られた文字列を操作するときは注意。

構文
Folder.GetDetailsOf( vItem, iColumn )
引数
vItem (FolderItem オブジェクト省略可
情報を取得する項目。これはFolderItemオブジェクトである必要があります。
iColumn (Variant省略可
取得する情報を指定するInteger値。アイテムに利用できる情報は、アイテムが表示されているフォルダによって異なります。この値は、シェルビューに表示されるゼロベースの列番号に対応します。
戻り値
iColumnに指定された情報

Folder オブジェクトを返すメソッド・プロパティ

Shell.BrowseForFolder メソッド
フォルダ選択のダイアログボックスを表示し、選択したフォルダのFolderオブジェクトを返す。
Folder.GetDetailsOf メソッド
FolderItemオブジェクトがフォルダの場合、Folder オブジェクトを返します。

関連するメソッド・プロパティ

.png
項目メソッド・プロパティ
種類
場所
リンク先ShellLinkObject.Path プロパティ
作業フォルダーShellLinkObject.WorkingDirectory プロパティ
ショートカットキーShellLinkObject.Hotkey プロパティ
実行時の大きさFolder.GetDetailsOf メソッド
コメントFolder.GetDetailsOf メソッド
.png
項目メソッド・プロパティ
.png
項目メソッド・プロパティ

iColumn

以下のプログラムを実行すると、指定したFolderオブジェクトで使用できるiColumnの項目を連想配列に格納します。

項目名から数値を取得できます。

UWSC
HASHTBL iColumn

FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

以下のプログラムで項目名が取得できます。

UWSC
Folder.GetDetailsOf(EMPTYPARAM, i)

よって連想配列に以下のようにiColumn[項目名] = 値の形式で格納されているため、項目名を指定すれば対応する値が取得できることになります。

UWSC
iColumn["名前"] = 0
iColumn["サイズ"] = 1
iColumn["項目の種類"] = 2
…

名前から対応する数値を取得するには、以下のように記述します。この場合0が返ります。

UWSC
iColumn["名前"]

以下は項目名から数値、数値から項目名を取得することができます。

UWSC
HASHTBL iColumn

FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

FOR i = 0 TO LENGTH(iColumn)
	iColumn[iColumn[i, HASH_VAL]] = iColumn[i, HASH_KEY]
NEXT
UWSC
iColumn[0] = "名前"
iColumn[1] = "サイズ"
iColumn[2] = "項目の種類"
…

0に対応する項目名を取得します。この場合名前が返ります。

UWSC
PRINT iColumn[0]

項目一覧

Shell.NameSpaceで引数に0〜50の値を指定したときに出てきた項目の一覧です。

1 35mm 焦点距離 BCC BCC アドレス CC CC アドレス EXIF バージョン FAX 番号 (会社) IM アドレス IP アドレス ISO 速度
2 MAC アドレス SAP TTY/TTD 電話 To do タイトル URL Web ページ この回のタイトル ほかの市区町村 アカウント名 アクセス日時
3 アラーム時刻 アルバム アルバム ID アルバム アーティストで並べ替え アルバムで並べ替え アルバムのアーティスト アーカイブ日時 イニシャル イニシャル キー イベント
4 エピソード番号 エンコード方式 オフラインの状態 オンライン カテゴリ カメラのモデル カメラの製造元 クライアント ID クラス グループ
5 コメント コレクション コンテンツの作成日時 コンパイルの一部 コンピューター コールバック番号 サイズ サフィックス サブタイトル サポートのリンク
6 シーズン番号 ジャンル ステレオ ステーション コール サイン ストア スライド セットのパート ソース タイトル タイトルで並べ替え
7 タグ チャンネル番号 テレックス ディスク ディレクター デザイナー/メーカー デザイン対象 デバイス カテゴリ デバイス名 データ速度
8 トラック番号 ドキュメント ドキュメント ID ニックネーム ネットワークのカテゴリ ネットワークの場所 パス ビット レート ビットの深さ ビデオの向き
9 ビデオ圧縮 ビート数/分 ファイル システム ファイル バージョン ファイルの所有権 ファイルの説明 ファイル名 ファイル拡張子 ファイル数 ファミリ
10 フォルダー フォルダーのパス フォルダー名 フォント スタイル フォント バージョン フォント ファイル名 フォントの種類 フォント埋め込み可能 フラグの有無 フラグの状態
11 フラグの色 フラッシュ モード フレンドリ名 フレーム幅 フレーム率 フレーム高 プライマリ電子メール プログラムのモード プログラムの説明 プログラム名
12 プロジェクト プロデューサー ペアリング済み ページ数 ホスト アドレス ホワイト バランス ポケットベル マスター キーワード ミドル ネーム メディアの作成日時
13 モデル ユーザー Web URL ラベル リソース リリース日 リンクの状態 リンク先 レンズ メーカー レンズ モデル ローカル コンピューター
14 ワイヤレス モード ワークグループ 事業部 人物 仕事の所有者 他の国/地域 他の番地 他の私書箱 他の郵便番号 他の都道府県
15 件名 任意出席者 任意出席者アドレス 会社 会社のホーム ページ 会社代表電話 会社電話 会話 ID 会議の状態 住所 (その他)
16 住所 (会社) 住所 (自宅) 住所 (郵送先) 作成日時 作成者 作曲者 作曲者で並べ替え 作者 使用率 使用領域
17 保護 保護者による制限 保護者による制限の理由 優先度 元の場所 光源 共同作成者 共有 共有の種類 共有ユーザー
18 共有中 共有状態 内容の状態 内容の種類 再帰 再放映 分類 分類項目 利用可能性 削除
19 削除日時 前回保存日時 前回印刷日 勤務先所在地 単語数 参加アーティスト 参加アーティストで並べ替え 参加者 取得日時 受信日時
20 可用性の状態 合計サイズ 名2 名前 向き 商標 国/地域 国/地域 (会社) 国/地域 (自宅)
21 垂直方向の解像度 場所 場所ごと 大きさ 子供 字幕 完了 完了日 宛先
22 対象の距離 局名 属性 履歴の種類 差出人 市 (会社) 市 (自宅) 市区町村 (郵送先)
23 彩度 役職 必須出席者 必須出席者アドレス 性別 所有者 抜粋 指揮者 探索方法 接続
24 接続済み 携帯電話 撮影日時 放送日 日付時刻 暗号化の状態 更新日時 最大絞り 最終表示日 期間
25 期限 未完了 概要 氏名 水平方向の解像度 添付 添付ファイル 添付ファイルの有無 測光モード 焦点距離
26 状態 球形 番地 (会社) 番地 (自宅) 番地 (郵送先) 発行元 私書箱 (会社) 私書箱 (自宅) 私書箱 (郵送先) 秘密度
27 秘書の名前 秘書の電話 種類 空き時間情報 空き領域 終了日 終了済 経費情報 絞り値 継続時間
28 総ビット レート 総ファイル サイズ 総編集時間 職業 肩書き 自動要約 自動車電話 自宅 FAX 自宅電話
29 著作権 表示/非表示 表題2 製作者 製品バージョン 製品名 製造元 言語 記念日 記録時間
30 評価 認識された種類 誕生日 説明 課金情報 趣味 送信元アドレス 送信先アドレス 送信日時 送信者アドレス
31 送信者名 通常の電話 連絡先の名 進捗状況 部署 郵便番号 (会社) 郵便番号 (自宅) 郵便番号 (郵送先) 都道府県 都道府県 (会社)
32 都道府県 (自宅) 配偶者 重要度 長さ 開催者住所 開催者名 開始日 開封の状態 関連度 雰囲気
33 電子メール アドレス 電子メール2 電子メール3 電子メールの一覧 電子メール表示名 電話番号 電話番号またはホスト アドレス 露出プログラム 露出時間 露出補正
34 項目の種類 高さ

制御文字

GetDetailsOfメソッドで取得した文字列には制御文字が含まれていることがあります。制御文字が含まれているかどうかは文字数を出力することで確認することができます。

例えば撮影日時を取得した際の文字列2021/05/29 13:16の文字数は1文字ずつ数えていくと16文字ですが、LENGTH関数では21と出力されます。つまり21-16で5文字分の制御文字が含まれているとこがわかります。

文字列を1文字ずつASC関数で調べると以下のように82068207と目に見えない文字が存在していることがわかります。32は半角スペースです。

UWSC
DIM datetime = Folder.GetDetailsOf(FolderItem, iColumn["撮影日時"])
PRINT datetime
PRINT LENGTH(datetime)
PRINT

FOR i = 1 TO LENGTH(datetime)
	DIM s = COPY(datetime, i, 1)
	PRINT s + "<#TAB>" + ASC(s)
NEXT
結果
プレーンテキスト
2021/05/29 13:16
21

‎	8206
2	50
0	48
2	50
1	49
/	47
‎	8206
0	48
5	53
/	47
‎	8206
2	50
9	57
 	32
‏	8207
‎	8206
1	49
3	51
:	58
1	49
6	54

文字列から制御文字を取り除くためには、以下のようにREPLACE関数で置換します。配列には削除したい制御文字を格納。

UWSC
DIM array[] = CHR(8206), CHR(8207)
FOR item IN array
	str = REPLACE(str, item, "")
NEXT

プログラム実行例

写真の撮影日時毎に枚数を取得

選択したフォルダにある写真の撮影日時を取得・カウントします。

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
Folder = Shell.BrowseForFolder(0, "フォルダを選択してください。", 0)

HASHTBL iColumn

FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

HASHTBL dates

FOR i = 0 TO Folder.Items.Count - 1	
	FUKIDASI(i + "/" + Folder.Items.Count)
	DIM FolderItem = Folder.Items.Item(i)
	DIM datetime = Folder.GetDetailsOf(FolderItem, iColumn["撮影日時"])
	IFB datetime = "" THEN
		dates["0000/00/00"] = dates["0000/00/00"] + 1
	ELSE
		deleteControlCharacter(datetime)
		DIM date = text(datevalue(datetime), "yyyy/mm/dd")
		dates[date] = dates[date] + 1
	ENDIF
NEXT

FOR i = 0 TO LENGTH(dates) - 1
	PRINT dates[i, HASH_KEY] + "<#TAB>" + dates[i, HASH_VAL]
NEXT

// 制御文字を削除する
FUNCTION deleteControlCharacter(Var str)
	DIM array[] = CHR(8206), CHR(8207)
	FOR item IN array
		str = REPLACE(str, item, "")
	NEXT
	RESULT = str
FEND
結果
プレーンテキスト
2021/05/29	2
2021/06/01	2
2021/06/02	5
2021/06/03	2
2021/06/04	16
0000/00/00	6
使用関数

プロパティの項目を取得

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

DIM path = "C:\Users\akita\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Internet Explorer.lnk"
DIM Folder = Shell.NameSpace(FSO.GetParentFolderName(path))

HASHTBL iColumn
 
FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i	
NEXT

FOR i = 0 TO LENGTH(iColumn)
	iColumn[iColumn[i, HASH_VAL]] = iColumn[i, HASH_KEY]
NEXT

DIM FolderItem = Folder.ParseName(FSO.GetFileName(path))
DIM array[] = "名前", "項目の種類", "ファイルの説明", "フォルダーのパス", "サイズ", "作成日時", "更新日時", "アクセス日時", "属性"

FOR i = 0 TO UBound(array)
	PRINT array[i] + ","+ Folder.GetDetailsOf(FolderItem, iColumn[array[i]])
NEXT
結果
CSV
名前,               Internet Explorer
項目の種類,         ショートカット
ファイルの説明,     
フォルダーのパス,   C:\ユーザー\akita\AppData\Roaming\Microsoft\Windows\スタート メニュー\プログラム\Windows アクセサリ
サイズ,             1.31 KB
作成日時,           2021/02/04 12:46
更新日時,           2022/05/18 02:24
アクセス日時,       2023/04/24 00:29
属性,               A
使用関数
解説

デスクトップのファイル一覧

UWSC
CONST ssfDESKTOP = 0

HASHTBL iColumn

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDESKTOP)
DIM FolderItems = Folder.Items

FOR n = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT

FOR n = 0 TO FolderItems.Count - 1
	DIM FolderItem = FolderItems.Item(n)
	WITH FolderItem
		PRINT .Name
		PRINT .Size + " Byte"
		PRINT .Type
	ENDWITH
	PRINT "-----"
NEXT
使用関数
解説

フォルダ内のファイルを更新日時でソートする

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("C:\Program Files (x86)\UWSC")
DIM FolderItems = Folder.Items

HASHTBL iColumn

FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

DIM filename[-1]
DIM datetime[-1]

FOR i = 0 TO FolderItems.Count - 1
	DIM FolderItem = FolderItems.Item(i)
	IF FolderItem.isFolder THEN CONTINUE
	arrayPush(filename, Folder.GetDetailsOf(FolderItem,iColumn["名前"]))
	arrayPush(datetime, Folder.GetDetailsOf(FolderItem, iColumn["更新日時"]))
NEXT

QSORT(datetime, QSRT_NATURALA, filename)

FOR i = 0 TO UBound(filename)
	PRINT filename[i] + "<#TAB>" + datetime[i]
NEXT
結果
プレーンテキスト
UDebug.chm	2014/05/11 1:58
RecIE.chm	2014/05/11 1:58
Uws2Exe.chm	2015/08/13 16:12
RecUws.dll	2016/03/25 4:57
UWSC.exe	2016/10/15 13:33
Uws2Exe.exe	2016/10/15 13:34
RecIE.exe	2016/10/15 13:35
UDebug.exe	2016/10/15 13:37
XRef.exe	2016/10/15 13:38
Readme.txt	2016/10/15 13:39
uwsc.chm	2016/10/15 13:41
unins000.exe	2018/06/27 12:48
unins000.dat	2018/06/27 12:49
使用関数

写真を撮影日時毎にフォルダ分けする

UWSC
CONST ssfMYPICTURES = 39

DIM Folder[1]
DIM folderspec[1]

DIM Shell = CREATEOLEOBJ("Shell.Application")
folderspec[0] = "D:\Pictures\100ANDRO\"
Folder[0] = Shell.NameSpace(folderspec[0])

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

HASHTBL iColumn

FOR i = 0 TO 350
	iColumn[Folder[0].GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

DIM destination[-1]
DIM path[-1]

DIM cnt = Folder[0].Items.Count - 1

FOR i = cnt TO 0 STEP -1
	FUKIDASI(i + "/" + cnt)
	DIM FolderItem = Folder[0].Items.Item(i)
	IF FolderItem.isFolder THEN CONTINUE
	DIM filename = FolderItem.Name
	DIM datetime = deleteControlCharacter(Folder[0].GetDetailsOf(FolderItem, iColumn["撮影日時"]))
	PRINT filename
	PRINT datetime
	PRINT "-----"
	TRY
		DIM date = text(dateValue(datetime), "yyyy-mm-dd")
	EXCEPT
		date = "0000-00-00"
	ENDTRY
	folderspec[1] = FSO.BuildPath(folderspec[0], date)
	Folder[1] = Shell.NameSpace(folderspec[1])
	
	arrayPush(destination, folderspec[1])
	arrayPush(path, FolderItem.Path)
NEXT

FOR i = 0 TO UBound(destination)
	IF !FSO.FolderExists(destination[i]) THEN CreateFolders(destination[i])
	Folders = Shell.NameSpace(destination[i])
	Folders.MoveHere(path[i])
NEXT

FUNCTION deleteControlCharacter(str)
	DIM array[] = CHR(8206), CHR(8207)
	FOR item IN array
		str = REPLACE(str, item, "")
	NEXT
	RESULT = str
FEND
使用関数

フォルダ内の音声ファイルをすべて再生

UWSC
HASHTBL iColumn

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("C:\Windows\Media")

FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

DIM FolderItems = Folder.Items
DIM extensions[] = ".wav", ".mid", ".avi", ".mp3"

FOR FolderItem IN FolderItems
	DIM path = FolderItem.Path
	IF inArray(Folder.GetDetailsOf(FolderItem, iColumn["ファイル拡張子"]), extensions) = FALSE THEN CONTINUE
	FUKIDASI(path)
	SOUND(path, TRUE)
NEXT
使用関数

指定フォルダ内の曲をトラック番号順で再生

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM folderspec = "F:\Music\sample"
DIM Folder = Shell.NameSpace(folderspec)
DIM FolderItems = Folder.Items

HASHTBL iColumn

FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

DIM filename[-1]
DIM track[-1]

FOR i = 0 TO FolderItems.Count - 1
	DIM FolderItem = FolderItems.Item(i)
	IF FolderItem.isFolder THEN CONTINUE
	IF Folder.GetDetailsOf(FolderItem, iColumn["ファイル拡張子"]) <> ".wav" THEN CONTINUE
	arrayPush(filename, Folder.GetDetailsOf(FolderItem,iColumn["名前"]))
	arrayPush(track, Folder.GetDetailsOf(FolderItem, iColumn["トラック番号"]))
NEXT

QSORT(track, QSRT_NATURALA, filename)

FOR i = 0 TO UBound(filename)
	DIM path = folderspec + "\" + filename[i]
	FUKIDASI(filename[i])
	SOUND(path, TRUE)
NEXT
使用関数
解説

デフォルトプリンターを取得

UWSC
CONST ssfPRINTERS = 4

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfPRINTERS)
DIM FolderItems = Folder.Items

HASHTBL iColumn

FOR n = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT

FOR n = 0 TO FolderItems.Count - 1
	DIM FolderItem = FolderItems.Item(n)
	DIM PrinterName = Folder.GetDetailsOf(FolderItem, iColumn["名前"])
	FOR i = 0 TO FolderItem.Verbs.Count - 1
		IF POS("通常使うプリンターに設定", FolderItem.Verbs.Item(i).Name) <> 0 THEN CONTINUE 2
	NEXT
	PRINT PrinterName
	BREAK
NEXT
結果
プレーンテキスト
Brother DCP-J963N Printer
使用関数

指定したフォルダの曲名と合計時間を出力

UWSC
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM Excel = CREATEOLEOBJ("Excel.Application")
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("D:\Music\Hey! Say! JUMP\COSMIC☆HUMAN")
DIM serial

HASHTBL iColumn

FOR n = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT

FOR n = 0 TO Folder.Items.Count - 1
	WITH Folder
		DIM FolderItem = .Items.Item(n)
		PRINT .GetDetailsOf(FolderItem, iColumn["名前"])
		serial = serial + timeValue(.GetDetailsOf(FolderItem, iColumn["長さ"]))
	ENDWITH
NEXT

PRINT "----------"
PRINT "合計時間<#TAB>" + text(serial, "h:m:s")
結果
プレーンテキスト
01 COSMIC☆HUMAN.wav
02 SWEET or HOT?.wav
03 ルーレット.wav
04 Draw My Life!.wav
05 COSMIC☆HUMAN (オリジナル・カラオケ).wav
06 SWEET or HOT- (オリジナル・カラオケ).wav
07 ルーレット (オリジナル・カラオケ).wav
08 Draw My Life! (オリジナル・カラオケ).wav
----------
合計時間	00:34:16
使用関数

指定したフォルダの動画の合計時間を求める

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("D:\Videos\")
DIM FolderItems = Folder.Items
DIM serial

HASHTBL iColumn

FOR n = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT

FOR n = 0 TO FolderItems.Count - 1
	WITH Folder
		DIM FolderItem = .Items.Item(n)
		extension = .GetDetailsOf(FolderItem, iColumn["ファイル拡張子"])
		IFB FolderItem.IsFolder = FALSE THEN
			serial = serial + timeValue(.GetDetailsOf(FolderItem, iColumn["長さ"]))
		ENDIF
	ENDWITH
NEXT

PRINT text(serial, "hh:mm:ss")
結果
プレーンテキスト
09:24:43
使用関数

関連記事

Shell.Explore メソッド
指定したディレクトリをエクスプローラで開きます。
Folder オブジェクト
シェルフォルダを表します。
Folder.CopyHere メソッド (Shell)
1つまたは複数のアイテムをフォルダにコピーします。
Folder.MoveHere メソッド (Shell)
1つまたは複数のアイテムをこのフォルダに移動します。
Folder.ParseName メソッド (Shell)
指定されたアイテムのFolderItem オブジェクトを作成して返します。
Folder.ParentFolder プロパティ (Shell)
指定したフォルダの親のFolder オブジェクトを返します。
FileSystemObject オブジェクト
Folder オブジェクト
Folder オブジェクト
フォルダのすべてのプロパティにアクセスできます。
Folder.Drive プロパティ (FSO)
指定したフォルダがあるドライブのドライブ文字を返します。