2014年1月2日木曜日

「あの処理」までの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

0 件のコメント:

コメントを投稿