2011-07-26 10 views
7

私はたくさんの写真やビデオを変換しようとしていますが、新しいフォーマットに変換すると元のファイルのプロパティが失われてしまいます。私は、古いファイルから "取得した日付"プロパティを読み込み、powershellを使用して新しいファイルを更新できるようにしたいと考えています。powershellを使用して、画像またはビデオの「撮影日」フィールドにプログラムでアクセスするにはどうすればよいですか?

答えて

8

私の周り敷設XIFデータを持つすべてのイメージがありますが、私は、これは動作するはずはないと思う(今それをテストすることはできません。一般的には

[reflection.assembly]::LoadWithPartialName("System.Drawing") 
$pic = New-Object System.Drawing.Bitmap('C:\PATH\TO\SomePic.jpg') 
$pic.GetPropertyItem(36867).Value 
+0

これは私が画像からdateTkenを得ることができる話の半分です。ビデオ(mpg、wmv)はどうですか? – JNappi

+0

うーん...私はいくつかの周りを突くします。私は正直であるかどうか分からない。 – EBGreen

+3

これはバイト配列を返します。これを[datetime]に変換するには、以下を行う必要があります: '' $ bitearr = $ pic.GetPropertyItem(36867).Value $ string = [System.Text.Encoding] :: ASCII.GetString($ bitearr)[datetime ] :: ParseExact($ string、 "yyyy:MM:dd HH:mm:ss'0"、$ Null) '' –

3

を、あなたは任意の拡張プロパティにアクセスすることができます。

$file = Get-Item IMG_0386.jpg 
$shellObject = New-Object -ComObject Shell.Application 
$directoryObject = $shellObject.NameSpace($file.Directory.FullName) 
$fileObject = $directoryObject.ParseName($file.Name) 

$property = 'Date taken' 
for(
    $index = 5; 
    $directoryObject.GetDetailsOf($directoryObject.Items, $index) -ne $property; 
    ++$index) { } 

$value = $directoryObject.GetDetailsOf($fileObject, $index) 


に従って、ただし:シェルGetDetailsOf方法によりエクスプローラに示すファイルをここanother answerから適合短い例では、ですには、を設定するための汎用メカニズムはありません。 System.Drawing.BitmapクラスのEBGreen mentionedは画像用には機能しますが、私はビデオファイル用の.NETオプションも知りません。

+0

これは、日付取得属性、具体的にどのように機能しますか? – Cullub

+0

'$ property = 'Date taken''は、「取得日」プロパティのインデックスを検索するために使用され、シェルオブジェクトはファイルのプロパティを読み取るために使用されます。 –

関連する問題