2014年1月2日木曜日

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

0 件のコメント:

コメントを投稿