「あの処理」までのVBScript (その7)◎指定フォルダからアイテムを再帰的に総ざらえして、「ビデオ」ファイルの指定プロパティを出力する。
の調整版。「あの処理」を追加するためにカウントするファイル調整とか、取得したプロパティの集計とかを追加しています。
処理について:
「標準的なMP4動画ファイルばかり集まったフォルダ」で動くようにしてるつもりなので、あまり高度な事をするつもりはありません。
処理は主に以下の事をしています。
①元の位置からフォルダを再帰移動。
②移動したフォルダ内のファイルの検索。
②検索条件は属性が"ビデオ"と不明なファイル。[NEW]
③ファイルの指定プロパティを取出す。
④ビデオ形式で縦横フレームが設定しているファイルは条件従い分類する。[NEW]
⑤処理ごとに集計して最後に出力。[NEW]
⑥不明なファイル(FLVなど)の処理手順は今後検討。
実行例:
Cscript Info_MovieItem008.vbs {パス名}
Cscript Info_MovieItem008.vbs {パス名}
Cscript Info_MovieItem008.vbs C:\DOGA\!\新しいフォルダー >
Cscript Info_MovieItem008.vbs C:\DOGA\!\新しいフォルダー > 008.txt
'以下、末尾までスクリプト
'################################################
'
'実行例:Cscript Info_MovieItem008.vbs ディレクトリ名
'
'
'処理概要
' 指定フォルダからアイテムを再帰的に検索して、"ビデオ"と不明ファイルの指定プロパティを出力する。
'
'################################################
Option Explicit
'WScript.Object
Dim oWSFso , oWArgu , oWShellA
Dim sPATH_ITEM0
'Dim sPATH_ITEM1
'処理カウント
Dim iFOLDER_COUNT
Dim iFILE_COUNT
Dim iCONV_COUNTALL '処理実行カウント
Dim iCONV_COUNT26free
Dim iCONV_COUNT29free
Dim iCONV_COUNT32q
Dim iCONV_COUNT32w
Dim iCONV_COUNTNOT '未処理ファイル数カウント
'フォルダ・ファイル操作
Set oWSFso = WScript.CreateObject("Scripting.FileSystemObject")
'ファイル属性確認
'再帰的に呼び出すので、宣言をメインループより出した
Set oWShellA = WScript.CreateObject("Shell.Application")
'カウントリセット
iFOLDER_COUNT = 0 'フォルダカウント
iFILE_COUNT = 0 'ファイルカウント
iCONV_COUNTALL = 0 '処理実行カウント
iCONV_COUNT26free = 0
iCONV_COUNT29free = 0
iCONV_COUNT32q = 0
iCONV_COUNT32w = 0
iCONV_COUNTNOT = 0 '未処理ファイル数カウント
'パラメータ確認用
Set oWArgu = WScript.Arguments
Select case oWArgu.count
Case 1 'ファイルの属性確認
'置換用に元パス名保持
sPATH_ITEM0 = oWArgu.item(0)
' sPATH_ITEM1 = ""
'元パスの確認
If oWSFso.FolderExists( sPATH_ITEM0 ) = True Then
'メインループ実行
CALL INFO_MovieFolder( sPATH_ITEM0)
'処理終了 処理別カウント
WScript.Echo ""
WScript.Echo "################################"
WScript.Echo "## ファイル属性確認カウント ##"
WScript.Echo vbTab & "検索フォルダ数:" & iFOLDER_COUNT
WScript.Echo vbTab & "処理ファイル数:" & iFILE_COUNT
WScript.Echo vbTab & "対象ファイル数:" & iCONV_COUNTALL
WScript.Echo vbTab & " 変換種別SD26f:" & iCONV_COUNT26free
WScript.Echo vbTab & " 変換種別SD29f:" & iCONV_COUNT29free
WScript.Echo vbTab & " 変換種別HD32q:" & iCONV_COUNT32q
WScript.Echo vbTab & " 変換種別HD32w:" & iCONV_COUNT32w
WScript.Echo vbTab & "不明ファイル数:" & iCONV_COUNTNOT
WScript.Echo "################################"
Else
Wscript.Echo "引数が不正です。" & vbTab & sPATH_ITEM0
End if
Case Else
Wscript.Echo "引数が不正です。実行例:Cscript Info_MovieItem008.vbs 元パス"
End Select
'終了処理
Set oWArgu = Nothing
Set oWSFso = Nothing
Set oWShellA = Nothing
Wscript.Quit
'################################################
' Case 1 '元パスファイルの属性確認
'################################################
'Sub INFO_MovieFolder(psPATH)
'
'処理概要
' 指定フォルダから再帰的にフォルダを検索する。
'
'IN
' psPATH 検索元パス
'
Sub INFO_MovieFolder(psPATH)
Dim cSFolder,oSFolder,oTemp,cFiler
Dim sMovie
Set cSFolder = oWSFso.GetFolder(psPATH)
Set oSFolder = cSFolder.SubFolders
'エラーでも実行
on error resume next
For Each oTemp In oSFolder
err.clear
sMovie = Left(oTemp.Name,1)
if sMovie ="$" or sMovie ="." then
else
'初回はルートフォルダ
if iFOLDER_COUNT = 0 then
iFOLDER_COUNT=iFOLDER_COUNT+1
Wscript.Echo iFOLDER_COUNT & ")" & psPATH
iFILE_COUNT = iINFO_MovieFile( psPATH ) + iFILE_COUNT
end if
'以後、サブフォルダフォルダ
iFOLDER_COUNT=iFOLDER_COUNT+1
Wscript.Echo iFOLDER_COUNT & ")" & psPATH & "\" & oTemp.Name
'処理ファイル数カウントアップ
iFILE_COUNT = iINFO_MovieFile( psPATH & "\" & oTemp.Name ) + iFILE_COUNT
'サブフォルダー検索
CALL INFO_MovieFolder(psPATH & "\" & oTemp.Name)
end if
Next
'サブフォルダー検索のみに使用
Set cFiler = cSFolder.Files
For Each oTemp In cFiler
err.clear
'処理なし
Next
'エラークリア
on error goto 0
'終了処理
Set cSFolder = Nothing
Set oSFolder = Nothing
Set oTemp = Nothing
Set cFiler = Nothing
End Sub
'################################################
'Function iINFO_MovieFile( psFolder )
'
'処理概要
' 指定分類"ビデオ"ファイルの指定プロパティをEchoする
'
'IN
' psFolder 抽出するフォルダパス名
'
'OUT
' Return 参照ファイル数 "ビデオ" or ""
'
Function iINFO_MovieFile( psFolder )
Const cBunrui_Video = "ビデオ"
Const cBunrui_Unknown = ""
Const cBunrui_Fumei = "[不明]"
Const PARA_COUNT = 512
Dim rHeaders(512)
Dim oNsFolder 'フォルダオブジェクト
Dim oItem 'フォルダ内特定アイテムオブジェクト
Dim iPara 'パラメータインデックス
Dim idxN ' 名前
Dim idxS ' サイズ
Dim idxB ' 分類
Dim idxL ' 長さ
Dim idxH ' フレーム高
Dim idxW ' フレーム幅
Dim sBunrui '分類
Dim iWidth '動画フレーム高
Dim iHeight '動画フレーム幅
'Echo文字列
Dim sWRITE_LINE
Dim iFileCount'処理件数カウント
'指定フォルダのNamespace取得
Set oNsFolder = oWShellA.Namespace(psFolder)
With oNsFolder
'処理件数カウント初期化
iFileCount = 0
'詳細ラベルの判定初期化
idxN = 0 ' 名前
idxS = 0 ' サイズ
idxB = 0 ' 分類
idxL = 0 ' 長さ
idxH = 0 ' フレーム高
idxW = 0 ' フレーム幅
'詳細ラベルの取得
For iPara = 0 to (PARA_COUNT-1)
rHeaders(iPara) = .GetDetailsOf(.Items, iPara)
Select Case .GetDetailsOf(.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
'名前以外判定
If idxS > 0 and idxB > 0 and idxL > 0 and idxH > 0 and idxW > 0 then
sWRITE_LINE = "No." & vbTab
sWRITE_LINE = sWRITE_LINE & rHeaders(idxN) & vbTab
sWRITE_LINE = sWRITE_LINE & rHeaders(idxB) & vbTab
sWRITE_LINE = sWRITE_LINE & rHeaders(idxS) & vbTab
sWRITE_LINE = sWRITE_LINE & rHeaders(idxL) & vbTab
sWRITE_LINE = sWRITE_LINE & rHeaders(idxH) & vbTab
sWRITE_LINE = sWRITE_LINE & rHeaders(idxW)
Wscript.Echo sWRITE_LINE
'詳細情報の取得 PARA_COUNT まで検索して保管情報を抜き出す
For Each oItem in .Items
'分類を取得
sBunrui = .GetDetailsOf(oItem, idxB)
'ビデオと不明のみ通す(フォルダやショートカットは除外)
If (sBunrui= cBunrui_Video) or (sBunrui= cBunrui_Unknown) Then
'処理件数カウント↑
iFileCount = iFileCount + 1
sWRITE_LINE = iFileCount & vbTab
'高さ、幅 を取得
iHeight = .GetDetailsOf(oItem, idxH)
iWidth = .GetDetailsOf(oItem, idxW)
'処理対象ファイル
If (sBunrui= cBunrui_Video) and (IsNumeric(iWidth)) and (IsNumeric(iHeight)) Then
'処理実行カウント
iCONV_COUNTALL = iCONV_COUNTALL + 1
iHeight = CLng(iHeight)
iWidth = CLng(iWidth)
If iHeight < 720 Then
iCONV_COUNT26free = iCONV_COUNT26free + 1
'sWRITE_LINE = "SD26f"
ElseIf iHeight = 720 Then
iCONV_COUNT29free = iCONV_COUNT29free + 1
'sWRITE_LINE = "SD29f"
ElseIf iHeight > 720 Then
If (iHeight / iWidth) > 0.6 Then
'4:3
iCONV_COUNT32q = iCONV_COUNT32q + 1
'sWRITE_LINE = "HD32q"
Else
'16:9
iCONV_COUNT32w = iCONV_COUNT32w + 1
'sWRITE_LINE = "HD32w
End if
End if
Else
'処理除外ファイル
'分類 Bunrui_Fumei セット
sBunrui = cBunrui_Fumei
iCONV_COUNTNOT = iCONV_COUNTNOT + 1
End if
sWRITE_LINE = sWRITE_LINE & .GetDetailsOf(oItem, idxN) & vbTab
sWRITE_LINE = sWRITE_LINE & sBunrui & vbTab
sWRITE_LINE = sWRITE_LINE & .GetDetailsOf(oItem, idxS) & vbTab
sWRITE_LINE = sWRITE_LINE & .GetDetailsOf(oItem, idxL) & vbTab
sWRITE_LINE = sWRITE_LINE & iHeight & vbTab
sWRITE_LINE = sWRITE_LINE & iWidth
Wscript.Echo sWRITE_LINE
End if
Next
Wscript.Echo ""
End if
End with
iINFO_MovieFile = iFileCount
Set oNsFolder = Nothing
Set oItem = Nothing
End Function
0 件のコメント:
コメントを投稿