使う言語は何がいいかなー。作れるならサクッと作れるのがいい。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
'
'処理概要
' 指定フォルダ内のアイテムのプロパティ情報を抜き出し 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 件のコメント:
コメントを投稿