2014年1月2日木曜日

「あの処理」までのVBScript (その3の2)no6 指定フォルダ内のアイテムのプロパティ情報を抜き出し Echo する。

「あの処理」までのVBScript (その3) 指定ファイルの指定プロパティを抜き出し Echo する。

の「指定ファイル」を「指定フォルダ」にした劣化版? です。 

とは言え、ちょいと改造してやれば、特定形式のファイルのみ情報を取り出すよう変更できます。

'以下、末尾までスクリプト
'
'実行例:Cscript ShowFileDetailsInFolder006.vbs パス名"
'
'処理概要
' 指定フォルダ内のアイテムのプロパティ情報を抜き出し Echo する。
'
Option Explicit

Dim oAgs
Dim oSFso 

Set oAgs = WScript.Arguments
Set oSFso = WScript.CreateObject("Scripting.FileSystemObject")

'パラメータ数チェック
If oAgs.count = 1 Then 

'引数のフォルダ存在チェック
If oSFso.FolderExists(oAgs.item(0)) = True Then

'メインルーチン呼び出し
   SHOW_FileDetails(oAgs.item(0))
Else

   Wscript.Echo oAgs.item(0) & vbTab & "引数が不正です。フォルダが存在しません"
End if

Else
    Wscript.Echo  oAgs.item(0) & vbTab & "引数が不正です。実行例:Cscript ShowFileDetailsInFolder006.vbs パス名"
End If

'終了処理
Set oAgs = Nothing
Set oSFso = Nothing
Wscript.Quit 



'メインルーチン
'sFolder 情報取得する存在するフォルダ名
'
Sub SHOW_FileDetails(sFolder)
Const PARA_COUNT = 512
    Dim rHeaders(512)

    Dim oShellA
    Dim oNsFolder

    Dim oItem
    Dim iFileCount
    Dim iPara 

Dim idxN ' 名前
Dim idxS ' サイズ
Dim idxB ' 分類
Dim idxL ' 長さ
Dim idxH ' フレーム高
Dim idxW ' フレーム幅

    Set oShellA = WScript.CreateObject("Shell.Application")

'指定フォルダのNamespace取得
    Set oNsFolder = oShellA.Namespace(sFolder)

'詳細ラベルの判定初期化
idxN = 0 ' 名前
idxS = 0 ' サイズ
idxB = 0 ' 分類
idxL = 0 ' 長さ
idxH = 0 ' フレーム高
idxW = 0 ' フレーム幅

'詳細ラベルの取得
For iPara = 0 to (PARA_COUNT-1)
rHeaders(iPara) = oNsFolder.GetDetailsOf(oNsFolder.Items, iPara)

Select Case oNsFolder.GetDetailsOf(oNsFolder.Items, iPara)

case "名前"
idxN = iPara

case "サイズ"
idxS = iPara

case "分類"
idxB = iPara

case "長さ"
idxL = iPara

case "フレーム高"
idxH = iPara

case "フレーム幅"
idxW = iPara

end select
'名前以外判定
If idxS > 0  and idxB > 0  and idxL > 0  and idxH > 0  and idxW > 0 then
Exit For
End if
Next

'処理件数カウント初期化
iFileCount = 0

'名前以外判定
If idxS > 0  and idxB > 0  and idxL > 0  and idxH > 0  and idxW > 0 then
'詳細情報の取得 PARA_COUNT まで検索して保管情報を抜き出す
For Each oItem in oNsFolder.Items

iFileCount = iFileCount + 1
Wscript.Echo iFileCount & ")--------------------"

Wscript.Echo idxN & ")" & rHeaders(idxN) & ": " & oNsFolder.GetDetailsOf(oItem, idxN)
Wscript.Echo idxS & ")" & rHeaders(idxS) & ": " & oNsFolder.GetDetailsOf(oItem, idxS)
Wscript.Echo idxB & ")" & rHeaders(idxB) & ": " & oNsFolder.GetDetailsOf(oItem, idxB)
Wscript.Echo idxL & ")" & rHeaders(idxL) & ": " & oNsFolder.GetDetailsOf(oItem, idxL)
Wscript.Echo idxH & ")" & rHeaders(idxH) & ": " & oNsFolder.GetDetailsOf(oItem, idxH)
Wscript.Echo idxW & ")" & rHeaders(idxW) & ": " & oNsFolder.GetDetailsOf(oItem, idxW)

Wscript.Echo ""
   Next
End if
Wscript.Echo iFileCount & "件 詳細表示完了"

'終了処理
    Set oShellA = Nothing
    Set oNsFolder = Nothing
    Set oItem = Nothing
End Sub

「あの処理」までのVBScript (その4の2)no5 指定フォルダから再帰的にサブフォルダを検索する。

方針変更:
 よくよく考えたら(その4)で勢いファイル検索まで行ってしまったが、そんなとこまで行く必要なかったよな。
 なんで(その4)からファイル検索を省いて、「指定フォルダから再帰的にサブフォルダを検索する」バージョンを作ってみた。 こっちの方がアレとの親和性いいかもなー。



'以下、末尾までスクリプトです。:
'
'実行例:Cscript FileSaikiSerch005.vbs ディレクトリ名 
Option Explicit

'処理概要
' 指定フォルダから再帰的にサブフォルダを検索する。
'
Dim oSFso , oAGS , oShellA

Dim sWRITE_LINE
Dim sPATH_ITEM0

'処理カウント
Dim iCONV_COUNTAll

'フォルダ・ファイル操作
Set oSFso = WScript.CreateObject("Scripting.FileSystemObject")

'ファイル属性確認
'再帰的に呼び出すので、宣言をメインループより出した
Set oShellA = WScript.CreateObject("Shell.Application")

'パラメータ確認用
Set oAGS = WScript.Arguments

If oAGS.count = 1 Then 
'置換用に元パス名保持
sPATH_ITEM0 = oAGS.item(0)

'処理カウント リセット
iCONV_COUNTAll  = 0

If oSFso.FolderExists( sPATH_ITEM0 ) = True  Then

'メインループ実行
   CALL GET_FOLDERMOVIE( sPATH_ITEM0 )

'処理終了 処理別カウント
WScript.Echo "####処理終了 処理別カウント####"
WScript.Echo vbTab & "ALL:" & iCONV_COUNTAll 
WScript.Echo "################################"
Else
   Wscript.Echo "引数が不正です。" & vbTab & oAGS.item(0)  

End if
Else
    Wscript.Echo "引数が不正です。" & vbTab & "実行例:Cscript FileSaikiSerch005.vbs ディレクトリ名 "

End If


'終了処理
Set oAgs = Nothing
Set oSFso = Nothing
Set oShellA = Nothing
Wscript.Quit 


Sub GET_FOLDERMOVIE(psPATH)
Dim cSFolder,oSFolder,oTemp,cFiler

Dim sMovie

Set cSFolder = oSFso.GetFolder(psPATH)
Set oSFolder = cSFolder.SubFolders

'エラーでも実行
on error resume next

For Each oTemp In oSFolder

sMovie = Left(oTemp.Name,1)
if sMovie ="$"  or sMovie ="." then

else
'初回はルートフォルダ
if iCONV_COUNTAll = 0 then
WScript.Echo psPATH
end if

'以後、サブフォルダフォルダ
WScript.Echo psPATH & "\" & oTemp.Name

'サブフォルダー検索
   GET_FOLDERMOVIE(psPATH & "\" & oTemp.Name)
end if 

Next

'サブフォルダー検索のみに使用
Set cFiler = cSFolder.Files
For Each oTemp In cFiler
sMovie = Left(oTemp.Name,1)
if sMovie ="$"  or sMovie ="." then

else
sMovie = Right(LCase(oTemp.Name) , 4)
If (sMovie = ".mp4" or sMovie = ".avi") Then
iCONV_COUNTAll = iCONV_COUNTAll + 1
End if
end if
Next

'エラークリア
err.clear
on error goto 0

'終了処理
Set cSFolder = Nothing
Set oSFolder = Nothing
Set oTemp = Nothing
Set cFiler = Nothing
End Sub

「あの処理」までのVBScript (その4) 指定フォルダから再帰的にファイル(.mp4,.avi)を検索する。

 DOSのコマンドで指定フォルダ以下の指定拡張子ファイルの一覧を取得するはこんな感じになる。

dir a:\*.mp4 /s /b /on > dirAmp4.txt
dir a:\*.avi /s /b /on > dirAavi.txt
dir b:\*.mp4 /s /b /on > dirBmp4.txt
dir b:\*.avi /s /b /on > dirBavi.txt

 非常にシンプルで美しい。。。。。が、これをVBScriptで実現しようと、
 【VBScript Tips】 フォルダの内容を再帰的に取得する。を参考に上記のDOSコマンドと同じような処理を行うようなスクリプトを組んだで、テスト実行してみたが、エラーで停止してしまうorz 
 ↓な感じ。
『C:\DOGA\!\FileSaikiSerch004.vbs(67, 2) Microsoft VBScript 実行時エラー: 書き込み
できません。』

 原因を調べてみたら、今回使用したFolder オブジェクトの"SubFolders"プロパティが、「隠しフォルダやシステム フォルダ」にもアクセスしようとしてエラーを発生させていたらしい。

 このようにフォルダオプションでは通常「表示しない」設定の見えないフォルダ。

 プロパティで何か制御できないのかなーと調べてみたけど判らん訳で、あまり使いたくなかったが、on error resume next の出番となりました。
 後、個人的に使用しているアプリが ピリオドが一文字目のフォルダを作ってたのでこれも無視したい。
 今回検索するフォルダは自分が作成したフォルダなのでフォルダの命名規約に一文字目は $ や ピリオドを使わない前提で、ファイル一文字目が $ や ピリオドのフォルダは無視、とベタベタな回避方法に。 もっとスマートな方法ないもんかいなorz。

 Dirコマンドとエクスプローラの検索により、"*.avi" と "*.mp4" ファイル数をチェックして一致を確認。最後に完成したマクロを実行してファイル数を一致を確認して、この機能は一先ず完成。

実行例:
 cscript FileSaikiSerch004.vbs A:
 cscript FileSaikiSerch004.vbs A: > a004.txt

実行結果:


 フォルダ名、ファイル名 しか参照してないから、ほどほどの早さになったかと。 まぁ、ディスク性能にもよるけどね。

'以下、末尾までスクリプトです。 ではまた~ノシ:
'
'実行例:Cscript FileSaikiSerch004.vbs ディレクトリ名
'
'処理概要
' 指定フォルダから再帰的にファイル(.mp4,.avi)を検索する。
'
Option Explicit

Dim oSFso , oAGS , oShellA

Dim sWRITE_LINE
Dim sPATH_ITEM0

'処理カウント
Dim iCONV_COUNTAll


'フォルダ・ファイル操作
Set oSFso = WScript.CreateObject("Scripting.FileSystemObject")

'ファイル属性確認
'再帰的に呼び出すので、宣言をメインループより出した
Set oShellA = WScript.CreateObject("Shell.Application")

'パラメータ確認用
Set oAGS = WScript.Arguments

If oAGS.count = 1 Then 
'置換用に元パス名保持
sPATH_ITEM0 = oAGS.item(0)

'処理カウント リセット
iCONV_COUNTAll  = 0

If oSFso.FolderExists( sPATH_ITEM0 ) = True  Then
'メインループ実行
   CALL GET_FOLDERMOVIE( sPATH_ITEM0 )

'処理終了 処理別カウント
WScript.Echo "####処理終了 対象.mp4 .avi合計####"
WScript.Echo sPATH_ITEM0 & vbTab & "ALL :" & iCONV_COUNTAll 
WScript.Echo "##################################"
Else
   Wscript.Echo "引数が不正です。" & vbTab & oAGS.item(0)  

End if
Else
    Wscript.Echo "引数が不正です。" & vbTab & "実行例:Cscript FileSaikiSerch004.vbs ディレクトリ名"

End If


'終了処理
Set oAgs = Nothing
Set oSFso = Nothing
Set oShellA = Nothing
Wscript.Quit 


Sub GET_FOLDERMOVIE(psPATH)
Dim cSFolder,oSFolder,oTemp,cFiler

Dim sMovie

Set cSFolder = oSFso.GetFolder(psPATH)
Set oSFolder = cSFolder.SubFolders

'エラーでも実行
on error resume next
For Each oTemp In oSFolder

sMovie = Left(oTemp.Name,1)
if sMovie ="$"  or sMovie ="." then

else
'WScript.Echo psPATH & "\" & oTemp.Name
   GET_FOLDERMOVIE(psPATH & "\" & oTemp.Name)
end if 

Next


Set cFiler = cSFolder.Files
For Each oTemp In cFiler


sMovie = Left(oTemp.Name,1)
if sMovie ="$"  or sMovie ="." then

else

sMovie = Right(LCase(oTemp.Name) , 4)
If (sMovie = ".mp4" or sMovie = ".avi") Then
iCONV_COUNTAll = iCONV_COUNTAll + 1
   WScript.Echo psPATH & "\" & oTemp.Name

End if
end if

Next

'エラークリア
err.clear
on error goto 0

'終了処理
Set cSFolder = Nothing
Set oSFolder = Nothing
Set oTemp = Nothing
Set cFiler = Nothing
End Sub

「あの処理」までのVBScript (その3) 指定ファイルの指定プロパティを抜き出し Echo する。

「あの処理」までのVBScript (その2) 指定ファイルのプロパティ情報を抜き出し Echo する。

に、指定パラメータのみ出力機能を付与するコードを書く前に、VBScript (その2)を違うPCで実行してみた。 

Windows7ではローカルファイル参照。

 Windows8.1ではネットワーク経由でWindows7のファイルを参照。

 よく見ると、プロパティのインデックス番号が違うやねん。、、、、、原因はもーえーわ~。

実行例:
 いつも通り。

処理について:
 テスト結果見るとインデックス番号が違ってもプロパティ名は一緒みたいだから、名前でインデックス検索して、値を引っ張ってくればいいんだな。

 参照プロパティは
名前
サイズ
分類
長さ
フレーム高
フレーム幅


実行結果:

 うんうん、きちんと値を引っ張って来てるな。もっとスマートでクールな方法があるかもしれんが、とりあえずベタベタなこの方法でいくか。この路線はここまでで、次回は別の路線変更。


'以下、末尾までスクリプトです。 ではまた~ノシ
'
'実行例:Cscript Show1File1Detail003.vbs パスファイル名"
'
'処理概要
' 指定ファイルの指定プロパティを抜き出し Echo する。
' 名前
' サイズ
' 分類
' 長さ
' フレーム高
' フレーム幅
' 指定はメインルーチン内に直接記述する
'
Option Explicit

Dim oAgs
Dim oSFso 

Set oAgs = WScript.Arguments
Set oSFso = WScript.CreateObject("Scripting.FileSystemObject")

'パラメータ数チェック
If oAgs.count = 1 Then 

'引数のファイル存在チェック
If oSFso.FileExists(oAgs.item(0)) = True Then

'メインルーチン呼び出し
   SHOW_1FileDetails(oAgs.item(0))
Else

   Wscript.Echo oAgs.item(0) & vbTab & "引数が不正です。ファイルが存在しません"
End if

Else
    Wscript.Echo  oAgs.item(0) & vbTab & "引数が不正です。実行例:Cscript Show1File1Detail003.vbs パスファイル名"
End If


'終了処理
Set oAgs = Nothing
Set oSFso = Nothing
Wscript.Quit 



'メインルーチン
'sPathName 情報取得する存在するパスファイル名
'
Sub SHOW_1FileDetails(sPathName)'****引数はパスファイル名
Const PARA_COUNT = 512
    Dim rHeaders(512)

    Dim oShellA
    Dim oNsFolder

    Dim oItem
    Dim iFileCount
    Dim iPara 

Dim idxN ' 名前
Dim idxS ' サイズ
Dim idxB ' 分類
Dim idxL ' 長さ
Dim idxH ' フレーム高
Dim idxW ' フレーム幅

    Dim oPath
Dim sFolder
Dim s1File

'指定ファイルオブジェクト取得
Set oPath = oSFso.GetFile(sPathName)

'ファイル名取得
s1File = CStr(oPath.Name)

'フォルダ名取得
sFolder = CStr(oPath.ParentFolder)

    Set oShellA = WScript.CreateObject("Shell.Application")

'指定フォルダのNamespace取得
    Set oNsFolder = oShellA.Namespace(sFolder)

'++st詳細ラベルの判定初期化
idxN = 0 ' 名前
idxS = 0 ' サイズ
idxB = 0 ' 分類
idxL = 0 ' 長さ
idxH = 0 ' フレーム高
idxW = 0 ' フレーム幅
'++ed

'詳細ラベルの取得
For iPara = 0 to (PARA_COUNT-1)
rHeaders(iPara) = oNsFolder.GetDetailsOf(oNsFolder.Items, iPara)

'++st指定プロパティの検索取得
Select Case oNsFolder.GetDetailsOf(oNsFolder.Items, iPara)

case "名前"
idxN = iPara

case "サイズ"
idxS = iPara

case "分類"
idxB = iPara

case "長さ"
idxL = iPara

case "フレーム高"
idxH = iPara

case "フレーム幅"
idxW = iPara

end select
'名前以外判定
If idxS > 0  and idxB > 0  and idxL > 0  and idxH > 0  and idxW > 0 then
Exit For
End if
'++ed
Next

'処理件数カウント初期化
iFileCount = 0
'名前以外判定
If idxS > 0  and idxB > 0  and idxL > 0  and idxH > 0  and idxW > 0 then

'詳細情報の取得 PARA_COUNT まで検索して保管情報を抜き出す
For Each oItem in oNsFolder.Items

if oItem = s1File then 'アイテム名一致の判定

iFileCount = iFileCount + 1
Wscript.Echo iFileCount & ")--------------------"

'++st指定プロパティの表示
Wscript.Echo idxN & ")" & rHeaders(idxN) & ": " & oNsFolder.GetDetailsOf(oItem, idxN)
Wscript.Echo idxS & ")" & rHeaders(idxS) & ": " & oNsFolder.GetDetailsOf(oItem, idxS)
Wscript.Echo idxB & ")" & rHeaders(idxB) & ": " & oNsFolder.GetDetailsOf(oItem, idxB)
Wscript.Echo idxL & ")" & rHeaders(idxL) & ": " & oNsFolder.GetDetailsOf(oItem, idxL)
Wscript.Echo idxH & ")" & rHeaders(idxH) & ": " & oNsFolder.GetDetailsOf(oItem, idxH)
Wscript.Echo idxW & ")" & rHeaders(idxW) & ": " & oNsFolder.GetDetailsOf(oItem, idxW)
'++ed

Wscript.Echo ""
End if 
   Next

Else
Wscript.Echo  sPathName & " は、正常なビデオ形式ではありません。保存しなおしてください"
End if
Wscript.Echo iFileCount & "件 詳細表示完了"

'終了処理
    Set oShellA = Nothing
    Set oNsFolder = Nothing
    Set oItem = Nothing
    Set oPath = Nothing
End Sub





「あの処理」までのVBScript (その2) 指定ファイルのプロパティ情報を抜き出し Echo する。

「あの処理」までのVBScript (その1) 指定フォルダ内のアイテムのプロパティ情報を抜き出し Echo する。

の1ファイル限定版です。(その1)の引数はフォルダ名でしたが、今回はパスファイル名となっています。
実行結果:

実行例:
  Cscript Show1FileDetails002.vbs パスファイル名
  Cscript Show1FileDetails002.vbs パスファイル名 > 002.txt

 で、Windows指定ファイルの「プロパティ情報」を抜き出して画面に表示します。 リダイレクトとかでファイルへの出力も出来ます。 

処理について:
 前回のコードがパス名だけの処理でしたが、今回は引数がパスファイル名という事で、パスファイル名をフォルダ名とファイル名に分離する処理を追加して出力時に同一ファイル名チェックしてecho出力しています。
 NamespaceのItem直接指定って出来ねーのかなー?
 次回は、指定パラメータのみ出力ってとこかー でもコレ。チョット問題が、、、。

'以下、末尾までスクリプトです。 ではまた~ノシ
'
'実行例:Cscript Show1FileDetails002.vbs パスファイル名"
'
'処理概要
' 指定ファイルのプロパティ情報を抜き出し Echo する。
'
Option Explicit

Dim oAgs
Dim oSFso 

Set oAgs = WScript.Arguments
Set oSFso = WScript.CreateObject("Scripting.FileSystemObject")

'パラメータ数チェック
If oAgs.count = 1 Then 

'引数のファイル存在チェック
If oSFso.FileExists(oAgs.item(0)) = True Then

'メインルーチン呼び出し
   SHOW_1FileDetails(oAgs.item(0))
Else

   Wscript.Echo oAgs.item(0) & vbTab & "引数が不正です。ファイルが存在しません"
End if

Else
    Wscript.Echo  oAgs.item(0) & vbTab & "引数が不正です。実行例:Cscript Show1FileDetails002.vbs パスファイル名"
End If

'終了処理
Set oAgs = Nothing
Set oSFso = Nothing
Wscript.Quit 



'メインルーチン
'sPathName 情報取得する存在するパスファイル名
'
Sub SHOW_1FileDetails(sPathName)'****引数はパスファイル名
Const PARA_COUNT = 512
    Dim rHeaders(512)

    Dim oShellA
    Dim oNsFolder

    Dim oItem
    Dim iFileCount
    Dim iPara 

'++stパス名から フォルダ名とファイル名を抽出
    Dim oPath
Dim sFolder
Dim s1File

'指定ファイルオブジェクト取得
Set oPath = oSFso.GetFile(sPathName)

'ファイル名取得
s1File = CStr(oPath.Name)

'フォルダ名取得
sFolder = CStr(oPath.ParentFolder)
'++ed

    Set oShellA = WScript.CreateObject("Shell.Application")

'指定フォルダのNamespace取得
    Set oNsFolder = oShellA.Namespace(sFolder)

'詳細ラベルの取得
For iPara = 0 to (PARA_COUNT-1)
rHeaders(iPara) = oNsFolder.GetDetailsOf(oNsFolder.Items, iPara)
Next

'処理件数カウント初期化
iFileCount = 0

'詳細情報の取得 PARA_COUNT まで検索して保管情報を抜き出す
For Each oItem in oNsFolder.Items

if oItem = s1File then '++stアイテム名一致の判定

iFileCount = iFileCount + 1
Wscript.Echo iFileCount & ")--------------------"

For iPara = 0 to (PARA_COUNT-1)

'情報格納分のみラベルと詳細情報の表示
If oNsFolder.GetDetailsOf(oItem, iPara) <> "" Then
Wscript.Echo iPara & vbtab & rHeaders(iPara) & ": " & oNsFolder.GetDetailsOf(oItem, iPara)
End If
Next
Wscript.Echo ""

End if '++ed

    Next

Wscript.Echo iFileCount & "件 詳細表示完了"

'終了処理
    Set oShellA = Nothing
    Set oNsFolder = Nothing
    Set oItem = Nothing
    Set oPath = Nothing
End Sub

「あの処理」までのVBScript (その1) 指定フォルダ内のアイテムのプロパティ情報を抜き出し Echo する。

 新年前の家の大掃除をしつつ、そーいや最近ガッツリコード書いてないな~と現実逃避気味にふと思いつつ新年を迎え、あの処理自動化できたら楽だよな~ちょっと面白そうだし「あの処理」を考えてみよう~と。そんな感じでした。
 使う言語は何がいいかなー。作れるならサクッと作れるのがいい。Dosバッチは、、、以前確認したら二バイトコード問題あるから除外。 .Netとか大げさ過ぎるしなー、WindowsPowerShellとか JavaScriptは慣れてからメンドクサそーだしなー、、、、VBScript弄くりまわしてたらその内デキルカーでVBScriptに決定。
 「あの処理」が完成するまで、つらつらと経過とかテストで作ったスクリプトとか載せる予定。
 「あの処理」とは、まぁこのブログのタイトルに関連しています。 相当ニッチな処理と思うのであまり期待しないでください。

「あの処理」までのVBScript (その1) 指定フォルダ内のアイテムのプロパティ情報を抜き出し Echo する。
実行結果:

実行例:
  Cscript ShowFileDetailsInFolder001.vbs パス名
  Cscript ShowFileDetailsInFolder001.vbs パス名 > 001.txt

 で、Windowsフォルダ内のフォルダやファイルなどに格納している「プロパティ情報」を抜き出して画面に表示します。 リダイレクトとかでファイルへの出力も出来ます。

処理について:
 Scripting.FileオブジェクトにAttributesプロパティというのがありますが、これは一般的なファイルの属性を取得するもので、今回は目的に達成できないと言う訳で、Shell.ApplicationオブジェクトのNamespaceを取得してグルグル回してアイテムのプロパティをぶっこ抜いています。 フォルダ内アイテム総ざらえしているので、次回は指定ファイルのみバージョンになりそうです。
 Windows7とWindows8での実行を確認しています。 そして複数環境で実行した事により、新たな問題が出てきたわけで、 将来的にはその対応も盛り込まないとなーorz
 後、On Error Resume Next は出来るだけ使わない方向でいきますので、あまり想定外なエラーとかはご了承ねがいます。

※ほとんど『 【http://pnpk.net】 スクリプトでファイルのプロパティを取得する。 』を参考にさせて頂きました。 感謝

'以下、末尾までスクリプトです。 ではまた~ノシ
'
'実行例:Cscript ShowFileDetailsInFolder001.vbs パス名"
'
'処理概要
' 指定フォルダ内のアイテムのプロパティ情報を抜き出し Echo する。
'
Option Explicit

Dim oAgs
Dim oSFso

Set oAgs = WScript.Arguments
Set oSFso = WScript.CreateObject("Scripting.FileSystemObject")

'パラメータ数チェック
If oAgs.count = 1 Then

'引数のフォルダ存在チェック
If oSFso.FolderExists(oAgs.item(0)) = True Then

'メインルーチン呼び出し
   SHOW_FileDetails(oAgs.item(0))
Else

   Wscript.Echo oAgs.item(0) & vbTab & "引数が不正です。フォルダが存在しません"
End if

Else
    Wscript.Echo  oAgs.item(0) & vbTab & "引数が不正です。実行例:Cscript ShowFileDetailsInFolder001.vbs パス名"
End If

'終了処理
Set oAgs = Nothing
Set oSFso = Nothing
Wscript.Quit



'メインルーチン
'sFolder 情報取得する存在するフォルダ名
'
Sub SHOW_FileDetails(sFolder)
Const PARA_COUNT = 512
    Dim rHeaders(512)

    Dim oShellA
    Dim oNsFolder

    Dim oItem
    Dim iFileCount
    Dim iPara

    Set oShellA = WScript.CreateObject("Shell.Application")

'指定フォルダのNamespace取得
    Set oNsFolder = oShellA.Namespace(sFolder)

'詳細ラベルの取得
For iPara = 0 to (PARA_COUNT-1)
rHeaders(iPara) = oNsFolder.GetDetailsOf(oNsFolder.Items, iPara)
Next

'処理件数カウント初期化
iFileCount = 0

'詳細情報の取得 PARA_COUNT まで検索して保管情報を抜き出す
For Each oItem in oNsFolder.Items

iFileCount = iFileCount + 1
Wscript.Echo iFileCount & ")--------------------"

For iPara = 0 to (PARA_COUNT-1)

'情報格納分のみラベルと詳細情報の表示
If oNsFolder.GetDetailsOf(oItem, iPara) <> "" Then
Wscript.Echo iPara & vbtab & rHeaders(iPara) & ": " & oNsFolder.GetDetailsOf(oItem, iPara)
End If
Next
Wscript.Echo ""

    Next

Wscript.Echo iFileCount & "件 詳細表示完了"

'終了処理
    Set oShellA = Nothing
    Set oNsFolder = Nothing
    Set oItem = Nothing
End Sub