2014年1月2日木曜日

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





0 件のコメント:

コメントを投稿