PowerShellで複数ファイルのプロパティを取得する方法(準備編)

Quick Edit Pencil

プロパティの詳細を一括でリストで書き出すPowerShellスクリプト

完成したスクリプトは別ページにて完成編として公開しています。


PowerShellで画像のプロパティを書き出す




PowerShellで詳細プロパティの値を取得する(フォルダーを指定して複数ファイルを対象)

$shell=New-Object -Com Shell.Application

Get-ChildItem D:\Pictures\EOS` D30 -recurse | Where-Object {-not $_.PSIsContainer} | ForEach-Object {$folderobj=$shell.NameSpace($_.DirectoryName);$item=$folderobj.ParseName($_.name);$folderobj.GetDetailsOf($item,22)}>test.txt

凡例
任意指定  ` はpath記述でスペースをエスケープ
      22はプロパティ詳細の説明のタイトル項目の番号(末尾に一覧番号あり)
オプション -recurseはサブフォルダも含む
      >は上書き、>>は追記

別の書き方として、次の「若手基盤系SEの日記。」さんのスクリプトでも同じ結果が得られます。

Get-ChildItemはオプションの指定で、拡張子やファイル名、ファイルサイズなどで検索して結果が得られます。

以下参考にしたサイト様


PowerShellで詳細プロパティの値を取得する(フォルダーを指定して複数ファイルを対象)

若手基盤系SEの日記。
大量のWordファイルのページ数を簡単に集計する方法(Powershell)
http://blog.livedoor.jp/ryanorano/archives/2015-05-13.html

# 指定されたパス配下のファイルのファイル名とページ数をCSV出力する。

# 変数
$path = "D:\temp"
$output = $path + "/output.csv"

# 指定されたパス配下のファイルを取得
$target = Get-Childitem $path | Where-Object {-not $_.PSIsContainer}

# WSHのShellオブジェクトを生成
$shell = New-Object -Com Shell.Application

# ファイル分だけ繰り返す
$target | ForEach-Object {

    # GetDetailsOfに必要なオブジェクト
    $folderobj = $shell.NameSpace($_.DirectoryName)
    $item = $folderobj.ParseName($_.name)

    # ファイル出力
    $_.name + "`," + $folderobj.GetDetailsOf($item,148) | Add-Content $output
}

@IT
PowerShellのGet-ChildItemコマンドレットでファイル名の一覧を取得する(基本編)
http://www.atmarkit.co.jp/ait/articles/0808/22/news129.html

PS > Get-ChildItem ……パラメータなしで実行する

PS > Get-ChildItem C:\Windows ……フォルダを指定して実行する

拡張子が「.log」「.dat」であるもので、かつ、ファイル名が「KB*」で始まらないファイルだけを抽出することができる
PS > Get-ChildItem C:\Windows\*.* -include *.log,*.dat -exclude KB* ……名前を限定して実行する

ファイルの属性情報や最終更新日、サイズなどの付随情報が不要で、フォルダ/ファイル名だけを確認したいという場合には、-Nameオプションを使用
PS > Get-ChildItem C:\Windows\*.* -include *.log,*.dat -exclude KB* -Name > c:\result.txt

PS > Get-ChildItem C:\Windows -Recurse ……サブフォルダの内容も表示する

PS > Get-ChildItem C:\Windows -Recurse -Name ……サブフォルダも含めて、名前だけを表示させる

検索やソートの方法も参考になる
PowerShellのGet-ChildItemコマンドレットでファイル名の一覧を取得する(応用編)
http://www.atmarkit.co.jp/ait/articles/0808/29/news131.html

PowerShellで詳細プロパティの値を取得する(単一ファイル)

PowerShellをはじめよう ~PowerShell入門~
https://letspowershell.blogspot.jp/2015/11/powershell_18.html

# 詳細プロパティの取得

# シェルオブジェクトを作成
$Shell = New-Object -ComObject Shell.Application

# フォルダの指定
$Folder = $Shell.NameSpace("C:\PowerShell")

# ファイルの指定
$File = $Folder.parseName("P001.JPG")

# 詳細プロパティ(撮影日時)の取得
$GET = $Folder.GetDetailsOf($File,12)

Write-Host $GET

PowerShell from Japan!! Blog
プロパティを抽出する Select-Object (PowerShell入門)
http://blog.powershell-from.jp/?p=283

Get-ChildItemコマンドレットで取得可能なプロパティ
PS C:\Work> Get-ChildItem | Get-Member -MemberType property

Get-ChildItemで取得できる結果からFullNameとLastWriteTimeの列のみを抜き出し
PS C:\Work> Get-ChildItem | Select-Object FullName, LastWriteTime

その他

Windows管理者のためのPowerShell
オブジェクト操作系コマンドレット
http://powershell.wiki.fc2.com/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%93%8D%E4%BD%9C%E7%B3%BB%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%AC%E3%83%83%E3%83%88
■「Get-ChildItem」を実行すると、カレントフォルダにある各ファイルの情報(Mode,LastWriteTime,Length Name)がFileInfoオブジェクトに格納されます。
5個のファイルがカレントフォルダに存在する場合、5個のFileInfoオブジェクトが配列となって出力されます。
Get-ChildItem | ForEach-Object {$_.Name + " : " + $_.Length}

■「ForEach-Object」は、「%」で置き換えることができます。
Get-ChildItem | % {$_.Name + " : " + $_.Length}

Qiita
【備忘録】PowerShell 指定したフォルダ以下の全てのファイルの絶対パスを取得する
http://qiita.com/gyokufoo/items/56ea98116f9e559126f0
Get-ChildItem -Recurse | select-object fullname
-append を追加すると追記になるはず
コマンドを二回に分けて実行するときなどは、使えるかもしれない
Get-ChildItem -Recurse | select-object fullname | out-file "sample.txt" -width 500 -append

PowerShellでファイルのディレクトリパスや上位ディレクトリ名を取得する方法 
http://win.just4fun.biz/PowerShell/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%83%91%E3%82%B9%E3%82%84%E4%B8%8A%E4%BD%8D%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.html
ディレクトリまで(ファイル名を除く) 
(Get-Item <ファイル>).DirectoryName
or
(Get-ChildItem <ファイル>).DirectoryName

Powershell 重複要素 異なる要素の出力と配列結合 
http://viewse.blogspot.jp/2013/08/powershell.html
ヒント
3)2つの配列を結合して、重複要素を重複させないようにする
$unionArr = $array1 + $array2 | Select-Object –Unique
追加参照
◆オブジェクトのキー重複を取り除く
http://mtgpowershell.blogspot.jp/2011/08/blog-post.html

【プロパティの番号リスト】
Delphi Programming
816_ファイルのプロパティ
http://mrxray.on.coocan.jp/Delphi/plSamples/816_FileProperty.htm

000 名前
 001 サイズ
 002 項目の種類
 003 更新日時
 004 作成日時
 005 アクセス日時
 006 属性
 007 オフラインの状態
 008 オフラインで利用可能
 009 認識された種類
 010 所有者
 011 分類
 012 撮影日時
 013 参加アーティスト
 014 アルバム
 015 年
 016 ジャンル
 017 指揮者
 018 タグ
 019 評価
 020 作成者
 021 タイトル
 022 件名
 023 分類項目
 024 コメント
 025 著作権
 026 トラック番号
 027 長さ
 028 ビット レート
 029 保護
 030 カメラのモデル
 031 大きさ
 032 カメラの製造元
 033 会社
 034 ファイルの説明
 035 プログラム名
 036 継続時間
 037 オンライン
 038 再帰
 039 場所
 040 任意出席者アドレス
 041 任意出席者
 042 開催者住所
 043 開催者名
 044 アラーム時刻
 045 必須出席者アドレス
 046 必須出席者
 047 リソース
 048 会議の状態
 049 空き時間情報
 050 合計サイズ
 051 アカウント名
 052 進捗状況
 053 コンピューター
 054 記念日
 055 秘書の名前
 056 秘書の電話
 057 誕生日
 058 住所 (会社)
 059 市 (会社)
 060 国/地域 (会社)
 061 私書箱 (会社)
 062 郵便番号 (会社)
 063 都道府県 (会社)
 064 番地 (会社)
 065 FAX 番号 (会社)
 066 会社のホーム ページ
 067 会社電話
 068 コールバック番号
 069 自動車電話
 070 子供
 071 会社代表電話
 072 部署
 073 電子メール アドレス
 074 電子メール2
 075 電子メール3
 076 電子メールの一覧
 077 電子メール表示名
 078 表題2
 079 名
 080 氏名
 081 性別
 082 名2
 083 趣味
 084 住所 (自宅)
 085 市 (自宅)
 086 国/地域 (自宅)
 087 私書箱 (自宅)
 088 郵便番号 (自宅)
 089 都道府県 (自宅)
 090 番地 (自宅)
 091 自宅 FAX
 092 自宅電話
 093 IM アドレス
 094 イニシャル
 095 役職
 096 ラベル
 097 姓
 098 住所 (郵送先)
 099 ミドル ネーム
 100 携帯電話
 101 ニックネーム
 102 勤務先所在地
 103 住所 (その他)
 104 ほかの市区町村
 105 他の国/地域
 106 他の私書箱
 107 他の郵便番号
 108 他の都道府県
 109 他の番地
 110 ポケットベル
 111 肩書き
 112 市区町村 (郵送先)
 113 国/地域
 114 私書箱 (郵送先)
 115 郵便番号 (郵送先)
 116 都道府県
 117 番地 (郵送先)
 118 プライマリ電子メール
 119 通常の電話
 120 職業
 121 配偶者
 122 サフィックス
 123 TTY/TTD 電話
 124 テレックス
 125 Web ページ
 126 内容の状態
 127 内容の種類
 128 取得日時
 129 アーカイブ日時
 130 完了日
 131 デバイス カテゴリ
 132 接続済み
 133 探索方法
 134 フレンドリ名
 135 ローカル コンピューター
 136 製造元
 137 モデル
 138 ペアリング済み
 139 クラス
 140 状態
 141 クライアント ID
 142 貢献者
 143 コンテンツの作成日時
 144 前回印刷日
 145 前回保存日時
 146 事業部
 147 ドキュメント ID
 148 ページ数
 149 スライド
 150 総編集時間
 151 単語数
 152 期限
 153 終了日
 154 ファイル数
 155 ファイル名
 156 ファイル バージョン
 157 フラグの色
 158 フラグの状態
 159 空き領域
 160 ビットの深さ
 161 水平方向の解像度
 162 幅
 163 垂直方向の解像度
 164 高さ
 165 重要度
 166 添付
 167 削除
 168 暗号化の状態
 169 フラグの有無
 170 終了済
 171 未完了
 172 開封の状態
 173 共有
 174 製作者
 175 日付時刻
 176 フォルダー名
 177 フォルダーのパス
 178 フォルダー
 179 参加者
 180 パス
 181 場所ごと
 182 種類
 183 連絡先の名
 184 履歴の種類
 185 言語
 186 最終表示日
 187 説明
 188 リンクの状態
 189 リンク先
 190 URL
 191 メディアの作成日時
 192 リリース日
 193 エンコード方式
 194 プロデューサー
 195 発行元
 196 サブタイトル
 197 ユーザー Web URL
 198 作者
 199 添付ファイル
 200 BCC アドレス
 201 BCC
 202 CC アドレス
 203 CC
 204 会話 ID
 205 受信日時
 206 送信日時
 207 送信元アドレス
 208 差出人
 209 添付ファイルの有無
 210 送信者アドレス
 211 送信者名
 212 ストア
 213 送信先アドレス
 214 To do タイトル
 215 宛先
 216 経費情報
 217 アルバムのアーティスト
 218 アルバム ID
 219 ビート数/分
 220 作曲者
 221 イニシャル キー
 222 コンパイルの一部
 223 雰囲気
 224 セットのパート
 225 期間
 226 色
 227 保護者による制限
 228 保護者による制限の理由
 229 使用領域
 230 EXIF バージョン
 231 イベント
 232 露出補正
 233 露出プログラム
 234 露出時間
 235 絞り値
 236 フラッシュ モード
 237 焦点距離
 238 35mm 焦点距離
 239 ISO 速度
 240 レンズ メーカー
 241 レンズ モデル
 242 光源
 243 最大絞り
 244 測光モード
 245 向き
 246 人物
 247 プログラムのモード
 248 彩度
 249 対象の距離
 250 ホワイト バランス
 251 優先度
 252 プロジェクト
 253 チャンネル番号
 254 この回のタイトル
 255 字幕
 256 再放映
 257 SAP
 258 放送日
 259 プログラムの説明
 260 記録時間
 261 ステーション コール サイン
 262 局名
 263 概要
 264 抜粋
 265 自動要約
 266 検索のランキング
 267 秘密度
 268 共有ユーザー
 269 共有状態
 270 製品名
 271 製品バージョン
 272 サポートのリンク
 273 ソース
 274 開始日
 275 課金情報
 276 完了
 277 仕事の所有者
 278 総ファイル サイズ
 279 商標
 280 ビデオ圧縮
 281 ディレクター
 282 データ速度
 283 フレーム高
 284 フレーム率
 285 フレーム幅
 286 総ビット レート

このブログの人気の投稿

PowerShellのGetDetailsOf メソッドでプロパティの詳細情報のID番号と項目名を列挙します

DOMノードオブジェクトを文字列に変換する

Powershell: プロパティの詳細情報インデックスと項目名の列挙

簡単 YouTube動画をダウンロード、音声のみ保存する方法 2019

書字方向 横書方向変換スクリプト 左書きから右書きへ(コピペ用途)

WP: Widget 年別アーカイブリストを表示する方法と和暦で表示する方法