2013-05-19 22 views
6

Ich versuche, ein Kennzeichnungssystem in Powershell zu schreiben. Ich mag ein 'tag' meine Wahl in einer Datei zum Beispiel auf, indem er das 'title' Feld mit, wie ich es nicht verwenden. Die Dateien, die ich markieren möchte, sind eine Mischung aus Fotos/Videos und Text.Powershell - wie in erweiterten Dateieigenschaften „Titel“ setzen

Ich habe es ziemlich einfach gefunden, Dateiattribute zu lesen/zu bekommen, da es mehrere Beispiele im Netz gibt, aber ich finde es extrem schwierig, Beispiele zum Ändern oder Schreiben erweiterter Dateieigenschaften zu finden; besonders in Powershell.

Ich habe es geschafft, 'titles' in Dateien mit Taglib-Sharp zu schreiben, aber das scheint Probleme mit verschiedenen Fotos zu haben, und es gibt nicht viele Informationen für die Fehlersuche. Plus es befasst sich nur mit Audio-/Video-/Foto-Dateien.

Dies ist der Code ich den Titel (von einem Test Foto) zu lesen:

$path = 'C:\temp\photo.jpg' 
$shell = New-Object -COMObject Shell.Application 
$folder = Split-Path $path 
$file = Split-Path $path -Leaf 
$shellfolder = $shell.Namespace($folder) 
$shellfile = $shellfolder.ParseName($file) 
$shellfolder.GetDetailsOf($shellfile, 21) 

Kann mir jemand sagen, wie ich, dass ich dieses Attribut aktualisieren und dann schreiben/es in die Datei speichern?

+0

Festlegen der erweiterten Dateieigenschaften in .NET scheint in [dieser Frage] (http://stackoverflow.com/questions/5337683/how-to-set-extendedfile-properties) abgedeckt. – zdan

+0

Hi - ja, ich habe diese Frage schon gesehen. Die dso dll scheint sich nur auf MS Office-Dokumente zu beziehen, während ich den Titel auf viele verschiedene Dateitypen setzen möchte. –

Antwort

2

Diese sind abhängig von den Dateiformaten. Windows Explorer kann diese erweiterten Dateieigenschaften nur anzeigen, da Plugins wissen, wie die Informationen abgerufen werden. Nicht alle Dateiformate unterstützen dies. Zum Beispiel haben einfache TXT-Dateien keinen Titel. Ich kenne keine einzige API, um die erweiterten Dateieigenschaften festzulegen, daher müssen Sie a library for each file format finden, die Sie unterstützen möchten. Zum Beispiel TagLib-Sharp für Fotos, Videos und Audio und iTextSharp für PDF. Aber selbst dann können Sie den Titel nicht für alle Formate festlegen, da einige dies nicht unterstützen.

Sie besser aussehen für einen anderen Weg, um Ihre Dateien zu markieren. Vielleicht hilft Ihnen NTFS Alternate Data Streams.

+0

Danke für die Info Lars. Die Dateien sind meist Fotos und Videos mit ein paar pdf's Text. Welche Bibliotheken benötige ich für diese? Außerdem bin ich in Powershell auf einer sehr einfachen Ebene des Codierens, also weiß ich nicht, wie ich das .NET-Beispiel von dsofill.dll in Powershell übersetzen kann, um zu überprüfen, ob es mit diesen Dateitypen funktioniert. Kannst du mir beim Übersetzen helfen? Auch die Dateien sitzen auf einem NAS also kein NTFS. –

+0

Ich habe meine Antwort mit Vorschlägen für Foto-, Video- und PDF-Dateien aktualisiert. Textdateien haben keine Metadaten, also nichts dafür. Darf ich vorschlagen, dass Sie diese Bibliotheken zuerst ausprobieren und neue und neue Fragen veröffentlichen, wenn Sie welche haben? –

+0

Hallo Lars - Danke, wie ich in meinem ersten Post gesagt habe, habe ich versucht mit Taglib-Sharp, aber es scheint nicht mit bestimmten Fotos zu arbeiten. Es gibt mir diesen Fehler "Ausnahme beim Aufrufen von" Speichern "mit" 0 "Argument (en):" Datei nicht beschreibbar. Beschädigte Metadaten? " Bei C: \ Write_tag_taglib-sharp.ps1: 8 Zeichen: 1 + $ media.save() + ~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: InvalidOperationException' --- Die Metadaten scheint gut und ich kann es manuell in Windows bearbeiten. –

Verwandte Themen