2013-05-19 14 views
6

Próbuję napisać system znakowania w Powershell. Chciałbym móc ustawić wybrany plik w pliku na przykład przy użyciu pola 'title', ponieważ go nie używam. Pliki, które chcę oznaczyć, to mieszanka zdjęć/filmów i tekstu.Powershell - jak ustawić "tytuł" w rozszerzonych właściwościach pliku

Zauważyłem, że dość łatwo jest odczytać/uzyskać rozszerzone atrybuty plików, ponieważ istnieje wiele przykładów dostępnych w sieci, jednak bardzo trudno jest znaleźć przykłady modyfikacji lub zapisu rozszerzonych właściwości pliku; szczególnie w Powershell.

Udało mi się napisać 'titles' do plików za pomocą taglib-sharp, ale wydaje się, że mają one problemy z różnymi zdjęciami i nie ma zbyt wiele informacji na temat rozwiązywania problemów. Dodatkowo zajmuje się tylko plikami audio/wideo/zdjęciowymi.

Jest to kod mam czytać tytuł (ze zdjęciem testowym):

$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) 

może ktoś mi powiedzieć jak mogę zaktualizować tego atrybutu, a następnie napisać/zapisać go do pliku?

+0

Ustawienie rozszerzonych właściwości pliku w .NET wydaje się być zawarte w [to pytanie] (http://stackoverflow.com/questions/5337683/how-to-set-extended-file-properties). – zdan

+0

Cześć - tak, już widziałem to pytanie. Wydaje się, że dso dll odnosi się tylko do dokumentów MS Office, podczas gdy ja chcę ustawić tytuł na wielu różnych typach plików. –

Odpowiedz

2

Te zależą od formatów plików. Eksplorator Windows może wyświetlać tylko te rozszerzone właściwości plików, ponieważ wtyczki informują o tym, jak je uzyskać. Nie wszystkie formaty plików obsługują to. Na przykład proste pliki txt nie mają tytułu. Nie znam pojedynczego interfejsu API, aby ustawić rozszerzone właściwości pliku, dlatego musisz znaleźć numer a library for each file format, który chcesz obsłużyć. Na przykład: TagLib-Sharp dla zdjęć, filmów i audio oraz iTextSharp dla pliku PDF. Ale nawet wtedy nie będzie można ustawić tytułu dla wszystkich formatów, ponieważ niektóre nie obsługują go.

Lepiej poszukaj innego sposobu oznaczania swoich plików. Może NTFS Alternate Data Streams może ci pomóc.

+0

Dzięki za informację Lars. Pliki to głównie zdjęcia i filmy z kilkoma plikami pdf. Jakie biblioteki są do tego potrzebne? Również jestem na bardzo podstawowym poziomie kodowania w Powershell, więc nie wiem, jak mogę przetłumaczyć przykład .Net dsofill.dll do Powershell, aby sprawdzić, czy działa z tego typu plikami. Czy możesz pomóc w tłumaczeniu? Również pliki znajdują się na NAS, więc nie ma NTFS. –

+0

Zaktualizowałem swoją odpowiedź z sugestiami dotyczącymi zdjęć, filmów i plików pdf. Pliki tekstowe nie mają żadnych meta danych, więc nic z tego. Czy mogę zasugerować, aby najpierw wypróbować te biblioteki i zadać nowe i oddzielne pytania, jeśli je posiadasz? –

+0

Cześć Lars - dziękuję, jak powiedziałem w moim pierwszym poście próbowałem z taglib-sharp, ale to nie działa z niektórymi zdjęciami. Daje mi ten błąd "Wywołanie wyjątku" Zapisz "z argumentami" 0 ":" Nie można zapisać pliku. Uszkodzone metadane? " C: \ Write_tag_taglib-sharp.ps1 8 Znak: 1 + $ media.save() + ~~~~~~~~~~~~~ + CategoryInfo: NotSpecified (:) [] MethodInvocationException + FullyQualifiedErrorId: InvalidOperationException' --- Metadane wyglądają dobrze i mogę edytować je ręcznie w systemie Windows. –

Powiązane problemy