Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Kann eine Batchdatei Metadaten auf P2 Karten ändern?

Frage Entwicklung Batch & Shell

Mitglied: kylaloo

kylaloo (Level 1) - Jetzt verbinden

24.02.2013 um 16:13 Uhr, 2178 Aufrufe, 14 Kommentare

Asche auf mein Haupt:
Ich bin leider weder Programmierer, noch Coder, noch scripte ich irgendetwas im Alltag.
Sollte ich mich also irgendwie dämlich ausdrücken, bitte ich das zu entschuldigen.
Trotz Suche war ich mir leider nicht sicher, wie ich mein Problem angehen sollte.
Darum dieser vielleicht etwas ausführlichere Anlauf. - Danke.

Folgendes Problem:

Wir arbeiten im Videobereich mit sog. Panasonic P2 Karten.
Auf denen befinden nicht nur die Filmclips und Audioclips, sondern auch
entsprechende xml Dateien mit den Metadaten dieser Clips.
Hat ein Kameramann diese Metadaten vergessen, oder falsche eingegeben,
weigert sich später das Ingestprogramm diese Karte in den Computer einzulesen.
Es startet nicht einmal.

Natürlich könnte man nun den Softwarehersteller darum bitten, diese Funktion
in das Ingest-Programm zu implementieren, aber wer große Häuser kennt,
weiss welch langwierige und kostspielige Wege das nach sich zieht.
Da ich unsere Autoren aber supporten soll, gab es bisher nur die Lösung,
das gesamte Material auf eine andere P2 Karte zu überspielen,
die über die gewünschten Metadaten verfügt. Das geht zeitlich nur
1:1, was im Normalfall dann im Schnitt etwa 30 Minuten pro Karte bedeuten würde.

Ein Blick in die xml Dateien verrät aber, dass man das gleiche in Sekunden
erreichen könnte, wenn man automatisiert diese erst entperrt, dann öffnet,
die fehlenden Einträge hinzufügt, oder ändert und dann das ganze sichert
und wieder sperrt, damit es nicht überschrieben werden kann.

Ein Kollege raunte mir zu, dass so etwas ein Kinderspiel sei.
Dazu bräuchte es nur einer entsprechenden Batch Datei und einem
Programmierer, der sich in seiner Mittagspause gerade langweilt.

Er mag übertrieben haben, aber ich würde schon gerne wissen,
wie ich mich dieser Thematik annähern kann.

Hat hier jemand eine Idee? Produkttipps? Weiterführende Links?
Ich komme vom Mac - gibt es vielleicht dort etwas passendes zum Thema?

Viele Grüße
Mathias
Mitglied: bastla
24.02.2013 um 17:02 Uhr
Hallo kylaloo und willkommen im Forum!

Hilfreich wäre
  • eine Erklärung, was mit dem "Entsperren" der XML-Datei gemeint ist bzw wie das ohne Batch durchgeführt wird.
  • eine konkrete Beschreibung, wie der Inhalt der XML.Datei geändert werden soll.

Grüße
bastla
Bitte warten ..
Mitglied: kylaloo
25.02.2013 um 03:51 Uhr
Hallo Bastla,

also mit "entsperren" meinte ich, dass die Datei ein kleines Schloss in der Vorschau hat und darum nicht beschreibbar ist.
Beim Mac kann ich dazu ein Häkchen bei "Geschützt" setzen, wenn ich die Info aufrufe.

Etwas kniffliger für mich das zweitere zu beschreiben.
Ich versuche es mal mit einem Ausschnitt aus der xml Datei.

Hier sieht man diverse Eintragungen im Bereich der Metadaten.
Auf der einen Seite Ausdrücke in spitzen Klammern, die manchmal fehlen können
und dann gibt es noch so eine Art Untermenge, die das Ingestprogramm zwingend erwartet.
Man erkennt sie an den Doppelpunkten. "BT:" steht hier zB. für "Beitragstitel" was dann so eine
"Unterkategorie" von <UserClipName> ist. Diesen Murks (ich nenn das Gewurschtel mal so) wurde vor einiger Zeit
eingerichtet und sollte ursprünglich eine Entlastung der Filmteams sein, denn die füllen einfach im Browser
ein Formular aus (Java Applet) und speichern das Ergebnis auf einer SD Karte, die sie wiederum zum
übertragen der Metadaten in die Kamera stecken können.
Dummerweise funktioniert das alles aber nicht, wenn man mangels Formularübertragung, die
Kamera direkt mit Metadaten gefüttert hat. Die Ausdrücke BT, AUT, ST, usw. fehlen dann
und das Ingestprogramm verweigert seine Arbeit.

Ich habe das mal "händisch" ausprobiert, fehlendes der Datei hinzugefügt und siehe da,
auf einmal funktionierte alles, so wie es soll.

Da nun jeder Clip auf der Karte seine eigene xml Datei hat, ist das
mitunter ein sehr langwieriges Verfahren. Mir schwebt da so eine Batchdatei vor, die dann im Notfall
die benötigten Rubriken des Formulars nachträgt und mit einem "Standardtext" ausfüllt, so dass das
Ingestprogramm wenigstens seine Arbeit macht.

01.
  
02.
 <ClipMetadata> 
03.
      <UserClipName>BT:18.02.2013 2er Bereitschaft / 1030 Uhr;AT:News 2013;0002</UserClipName> 
04.
      <DataSource>SHOOTING</DataSource> 
05.
      <Access> 
06.
        <Creator>AUT:();</Creator> 
07.
        <CreationDate>2013-02-19T16:03:39+01:00</CreationDate> 
08.
        <LastUpdatePerson>RED:Sascha Neuner;</LastUpdatePerson> 
09.
        <LastUpdateDate>2013-02-19T16:04:20+01:00</LastUpdateDate> 
10.
      </Access> 
11.
      <Device> 
12.
        <Manufacturer>Panasonic</Manufacturer> 
13.
        <SerialNo.>F8TKB0668</SerialNo.> 
14.
        <ModelName>AJ-HPX2100E</ModelName> 
15.
      </Device> 
16.
      <Shoot> 
17.
        <StartDate>2013-02-19T16:03:39+01:00</StartDate> 
18.
        <EndDate>2013-02-19T16:04:20+01:00</EndDate> 
19.
        <Location> 
20.
          <PlaceName>ST:Fussballspiel;</PlaceName> 
21.
        </Location> 
22.
      </Shoot> 
23.
      <Scenario> 
24.
        <ProgramName>ANR:13447616;PNR:28312254;EB:02;</ProgramName> 
25.
      </Scenario> 
26.
      <News> 
27.
        <Reporter>ORT:();</Reporter> 
28.
        <Purpose>KAM:Meyer;TON:Strauss;</Purpose> 
29.
      </News>
Bitte warten ..
Mitglied: bastla
25.02.2013, aktualisiert um 15:16 Uhr
Hallo kylaloo!

Unter welchem Betriebssystem soll die ganze Aktion eigentlich stattfinden?

Abgesehen davon hast Du noch nicht erklärt, wie Du das "Entsperren" der Datei durchführst.

Grüße
bastla
Bitte warten ..
Mitglied: kylaloo
26.02.2013 um 12:39 Uhr
Beim Betriebssystem wäre wahrscheinlich Windows 7 die richtige Wahl.
Im Haus wird das jetzt zum Standard gemacht. (Vorher XP)
Da ich aber als Supporter den Autoren mit meinem Equipment helfe,
ist eine Mac-Lösung für mein aktuelles MacbookPro (Mountain Lion) genauso ideal.

Vielleicht habe ich mit "Sperren" und "Entsperren" einen zu mysteriösen Charakter erzeugt.
Im Infofensterchen, das sich bei mit am Mac öffnet, wenn ich im Kontextmenü
"Informationen" auswähle, gibt es nach den üblichen Informationen, wie Größe, Erstellungs- und Änderungsdatum
zwei Ausdrücke, die ich wahlweise auswählen könnte (quadratisches Kästchen mit Häkchen) Einmal der Ausdruck "Formularblock"
und einmal der Ausdruck "Geschützt" Beide sind im Normalfall NICHT aktiviert.

Mir geht es hier um den Ausdruck "Geschützt" Dieser ist bei den XML-Dateien,
die ich auf der P2 Karte vorliegen habe aktiviert.

Der Effekt ist dann unter anderem der, dass eine Warnung aufpoppt, wenn ich die Datei in den Mülleimer ziehe,
oder dass sie nicht überschrieben werden kann, oder dass ich sonst irgendwie den Inhalt verändern kann.
Entferne ich das Häkchen wieder im Infofenster, geht das alles problemlos.
Da die XML Dateien auf der P2 Karte "von Hause aus" diese "Sicherung" aktiviert haben,
muss die geplante Batchdatei, diese Sicherung erst einmal aufheben können,
damit sie in der XML-Datei etwas verändern kann.
Da ich nicht weiss, inwiefern die weiterführenden Programme eine "geschützte"
XML Datei erwarten, wäre es schön, wenn diese Batchdatei am Ende der Korrekturen
die Dateien wieder diesen "Schutz" setzen könnte.

viele Grüße
Mathias
Bitte warten ..
Mitglied: bastla
26.02.2013 um 14:06 Uhr
Hallo kyaloo!

Da ich keine P2-Karte zum Testen habe, bin ich auf Deine Beschreibung angewiesen. Den Batch könnte ich nur für ein Windows-System anbieten, daher:
  • Was ist auf einem Windows-Rechner zu tun, um die XML-Datei editierbar zu machen? Meine Vermutung ginge in Richtung Attribut "Schreibgeschützt" (siehe "Eigenschaften" der Datei).

Grüße
bastla
Bitte warten ..
Mitglied: Lochkartenstanzer
26.02.2013 um 14:16 Uhr
Moin,

Für mich hört sich das wie:

  • mit chmod Datei beschreibbar machen.
  • mit find/grep/sed zwei drei zeilen einfügen
  • mit chmod wieder gegen beschreiben sichern

an.

Sollte sowohl mit Mac als auch unetr Windows kein Hexenwerk sein. Der größte Aufwand dürfte eher sein, die genaue Spezifikation für die Aufgabe festzulegen.

Aber da ich weder P2-karten noch Ingest kenne, kann ich da natürlich auch gewaltig danebenliegen.

lks
Bitte warten ..
Mitglied: kylaloo
26.02.2013 um 15:12 Uhr
Na, das klingt ja schon so, dass ich da auf dem richtigen Weg bin.
Hatte nämlich bereits gleich den Verdacht, dass da wer keine große Lust hat
und/oder der eine, den anderen nicht mag. Kompetenzgerangel zu Lasten
einer einfachen Lösung, wie wir das in größeren Unternehmen immer wieder finden.

Da ich aber Supporter sein soll, bin ich an einer effizienten Lösung interessiert
und will nicht den Buckel hinhalten müssen, nur weil sich zwei Silberrückengorillas
nicht einigen können über wessen Schreibtisch die Lösung angestrebt wird.

Mathias
Bitte warten ..
Mitglied: kylaloo
26.02.2013 um 18:19 Uhr
Ich kann inzwischen etwas eingrenzen, weil eben wieder einmal eine "korrupte" P2 Karte aufgetaucht ist.

Die relevanten Daten befinden sich allesamt im Tag (sagt man das so?)

01.
 <ClipMetadata> </ClipMetadata> 



Hier zunächst der betreffende Part aus einer typischen "korrupten" Datei.


01.
  
02.
 
03.
<ClipMetadata> 
04.
      <UserClipName>060A2B340101010501010D43130000007DE3A35B486305F00080458228E3440D</UserClipName> 
05.
      <DataSource>SHOOTING</DataSource> 
06.
      <Access> 
07.
        <CreationDate>2013-02-25T09:53:50+01:00</CreationDate> 
08.
        <LastUpdateDate>2013-02-25T09:53:57+01:00</LastUpdateDate> 
09.
      </Access> 
10.
      <Device> 
11.
        <Manufacturer>Panasonic</Manufacturer> 
12.
        <SerialNo.>C9TCA0093</SerialNo.> 
13.
        <ModelName>AG-HPX171E</ModelName> 
14.
      </Device> 
15.
      <Shoot> 
16.
        <StartDate>2013-02-25T09:53:50+01:00</StartDate> 
17.
        <EndDate>2013-02-25T09:53:57+01:00</EndDate> 
18.
      </Shoot> 
19.
      <Thumbnail> 
20.
        <FrameOffset>0</FrameOffset> 
21.
        <ThumbnailFormat>BMP</ThumbnailFormat> 
22.
        <Width>80</Width> 
23.
        <Height>60</Height> 
24.
      </Thumbnail> 
25.
    </ClipMetadata> 
26.
 



Und hier einmal die gleiche Struktur einer typisch "korrekten" Datei
Interessant sind hier weniger so Sachen, wie Seriennummer Modellnummer usw.
Auch dieser kryptische und unglaublich lange Clipname kann man getrost übersehen.
Die im Eingabeprogramm angelegten Felder sind es, um die es mir geht.
Es ist für das Ingestprogramm wichtig, dass sie überhaupt da sind, weniger, was drin steht.
Die abschliessende Zahl beim UserClipName ist übrigens nur die lfd. Nummer des Clips,
also hier der 17. Clip

01.
<ClipMetadata> 
02.
      <UserClipName>BT:();AT:();0017</UserClipName> 
03.
      <DataSource>SHOOTING</DataSource> 
04.
      <Access> 
05.
        <Creator>AUT:Mathias Hundt;</Creator> 
06.
        <CreationDate>2013-02-19T11:03:27+00:00</CreationDate> 
07.
        <LastUpdatePerson>RED:Mathias Hundt;</LastUpdatePerson> 
08.
        <LastUpdateDate>2013-02-19T11:03:33+00:00</LastUpdateDate> 
09.
      </Access> 
10.
      <Device> 
11.
        <Manufacturer>Panasonic</Manufacturer> 
12.
        <SerialNo.>J2TCB0104</SerialNo.> 
13.
        <ModelName>AG-HPX250EJ</ModelName> 
14.
      </Device> 
15.
      <Shoot> 
16.
        <StartDate>2013-02-19T11:03:28+00:00</StartDate> 
17.
        <EndDate>2013-02-19T11:03:33+00:00</EndDate> 
18.
        <Location> 
19.
          <PlaceName>ST:Hundts neuer Film;</PlaceName> 
20.
        </Location> 
21.
      </Shoot> 
22.
      <Scenario> 
23.
        <ProgramName>ANR:();PNR:();EB:();</ProgramName> 
24.
      </Scenario> 
25.
      <News> 
26.
        <Reporter>ORT:Frankfurt;</Reporter> 
27.
        <Purpose>KAM:Hundt;TON:Hundt;</Purpose> 
28.
      </News> 
29.
      <MemoList> 
30.
        <Memo MemoID="0"> 
31.
          <Offset>0</Offset> 
32.
          <Text>B:();</Text> 
33.
        </Memo> 
34.
      </MemoList> 
35.
      <Thumbnail> 
36.
        <FrameOffset>0</FrameOffset> 
37.
        <ThumbnailFormat>BMP</ThumbnailFormat> 
38.
        <Width>80</Width> 
39.
        <Height>60</Height> 
40.
      </Thumbnail> 
41.
    </ClipMetadata> 
42.
 


Zusammengefasst müsste diese Batchdatei also folgendes tun:

Datei entsperren.

Dann suchen, finden, ersetzen, hinzufügen:


im Tag "UserClipName" sollte zB. die beiden "Felder" "BT:" und "AT:" stehen.
Ohne Inhalt mit Klammern als Platzhalter oder ohne Klammern mit. Als Abschluss schließlich ein Semikolon.

Als nächstes sollte der Tag "Creator" mit dem Feld "AUT:" eine Zeile oberhalb "CreationDate" existieren.
In unserem Eingabefomular steht hier der Autorenname. Auch hier dürfte das Feld leer sein sofern dafür
dort dann ein "Klammerpaket" steht. (damit meine ich Klammer auf/Klammer zu)

Gleiches gilt für den Tag "LastUpdatePerson" mit der der zuständige Redakteur ("RED:") gemeint sein soll.
Spätestens hier zeigt sich meiner Meinung nach auch das "Selbstgestrickte" dieser Metadaten-Lösung

Nun ein weiterer (Unter-)Tag des Shoot-Tags, den es in der korrupten Datei nicht gibt. Er lautet: "Location"
Interessant hierbei, dass dort kein Ort, sondern ein Sendetitel ("ST:") eingetragen gehört.

Das (Ober-)Tag "Scenario" fehlt ebenfalls und somit auch das darin verschachtelte Tag "ProgramName"
mit den Formularfeldern "ANR:" "PNR:" und "EB:" (Allesamt Produktionsnummern und so ein Zeug)


Im ebenfalls fehlenden (Ober-)Tag "News" wird obiger inhaltlicher Fehler nun logisch weitergeführt.
In das Tag "Reporter" fügt man nun das Feld "ORT:" ein und in "Purpose" den Kameramann ("KAM:")
als auch den Tonmann ein ("TON:")

Zu guter letzt bleibt noch der Tag "Text" im (Ober-)Tag "MemoList" auszufüllen.
Und der Ausdruck "B:" steht hier für Bemerkungen

Datei sichern

Datei sperren.
Bitte warten ..
Mitglied: Pjordorf
26.02.2013 um 23:16 Uhr
Hallo,

Zitat von kylaloo:
eine "korrupte" P2 Karte aufgetaucht ist.
Sind die XML dateien immer an der gleichen Stelle kaputt oder kann das willkürlich durch die XML datei gehen? Was soll mit vorhandenen inhalten geschehen?

Hier zunächst der betreffende Part aus einer typischen "korrupten" Datei.
Sind die immer so kaputt bzw. sind es immer die gleichen Tags die fehlen bzw. nicht vollständig sind?

Datei entsperren.
Also ist die XML nur Schreibgeschützt? Kannst du selbst in einem Win7 Client testen (Eigenschaften der Datei).

Gruß,
Peter
Bitte warten ..
Mitglied: kylaloo
27.02.2013 um 03:47 Uhr
Zitat von Pjordorf:
Hallo,

> Zitat von kylaloo:
> eine "korrupte" P2 Karte aufgetaucht ist.
Sind die XML dateien immer an der gleichen Stelle kaputt oder kann das willkürlich durch die XML datei gehen? Was soll
mit vorhandenen inhalten geschehen?

Die Stellen sind unterschiedlich und hängen sehr stark von dem Tool ab, mit dem die Metadaten
eigegeben wurden. Es gibt da Player und Kameramenüs, mit denen man das im Grunde machen könnte.
Leider ist das aber *hinterher* mit keinem der Tools veränderbar. Und so läuft das ganze ab: Die "Grunddaten"
werden im Vorfeld erstellt, auf SD Karte kopiert und damit die Kamera "geimpft".
Die generiert dann wiederum eine XML Datei pro Clip und deponiert sie schreibgeschützt auf der P2-Karte.
Wäre der ganze workflow durchweg in einer Hand (zB. Panasonic), gäbe es das Problem
höchstwahrscheinlich nicht. Das Drama begann wohl mit einer - wo auch immer herkommenden - Eigenentwicklung
auf Java Applet Basis, damit die Eingabe bei Auftragserfassung bequem per Browser stattfinden kann.
Hier wurden Felder erfunden, umbenannt und willkürlich eingepflanzt. (Meine Meinung) und das dumme dabei:
Der gesamte Ablauf von der Idee, bis zum Schnitt des Materials hängt da jetzt mit dran und ist somit kaum veränderbar.
Zumindest nicht ohne erheblichen Kollateralschaden.
Ich bin mir auch einigermassen sicher, dass alle betreffenden Felder ohne Eingabe von Daten
angelegt werden dürften, mit Ausnahme der Felder, die automatisch generiert wurden und sich irgendwie mit Zeiten befassen,
wie "CreationDate" "StartDate" und deren Konsorten. Die korrespondieren ziemlich pingelig mit den Parametern,
die in den Clips selber eingebettet sind, wie Dauer, Codec und anderen trechnischen Kram.

Mir schwebt da eine "Musterdatei" vor, die ich immer dann per Batch einimpfe, wenn die Karte sich nicht ingesten lässt,
denn interessanterweise kann man so ziemlich alle Inhalte im Verarbeitungsfenster der Ingest-Software aktualisieren
und verändern, wenn sie denn anspringen täte. Vielleicht ist der Vergleich mit einem Starthilfekabel gar nicht so weit hergeholt.
Schaffe ich es die P2 Karte zu ingestieren, kann ich auch deren Metadaten umschreiben, oder gar völlig neu eingeben.
Das geht aber nur, wenn wenigstens alle für die Software relevanten Felder angelegt wurden.
Eine Batchdatei kann das wohl und damit wäre für mich ein fieser Supportaufwand erheblich angenehmer geworden.

> Hier zunächst der betreffende Part aus einer typischen "korrupten" Datei.
Sind die immer so kaputt bzw. sind es immer die gleichen Tags die fehlen bzw. nicht vollständig sind?

Leider nein. Die Fehlbedienung der Kamera erzeugt ein anderes "Muster", als beispielsweise
die Eingabe mit dem falschen Tool, oder der versehentlich ausgeschaltete Metadatengenerator der Kamera.


> Datei entsperren.
Also ist die XML nur Schreibgeschützt? Kannst du selbst in einem Win7 Client testen (Eigenschaften der Datei).

Sie ist "nur" Schreibgeschützt.
Bitte warten ..
Mitglied: 76109
28.02.2013 um 10:55 Uhr
Hallo kylaloo!

Lässt sich die Clip-Nummer anhand des Dateinamens ermitteln?


Gruß Dieter
Bitte warten ..
Mitglied: kylaloo
02.03.2013 um 00:54 Uhr
Nein, leider nicht.
Der Dateiname wird vom Zufallsgenerator bestimmt. Kryptisch und absolut nicht nachvollziehbar. Das macht es auch so schwer die Dateien zu sortieren. Ich benutze zum sortieren den Parameter "CreationDate", denn nicht einmal eine laufende Nummer findet ihren Weg in den Dateinamen. Hier als Beispiel, ein paar aktuelle "Kandidaten" meiner letzten Karte in chronologischer Reihenfolge: 00148N.MXF, 00186G.MXF, 00444.MXF und 002369.MXF
Bitte warten ..
Mitglied: 76109
17.03.2013, aktualisiert um 11:06 Uhr
Hallo kylaloo!

Versuchs mal mit diesem VB-Script (*.vbs)

Funktionen:
- Ermitteln des P2-Karten-Laufwerks (Wechsel-Datenträger mit Größe <> 0 und Ordner-Pfad '\Metadata')
- Erstellen einer XML-Vorlage (Template)
- Erstellen einer XML-Test-Vorlage
- Metadaten auslesen und Inhalte (falls vorhanden) in die XML-Vorlage übernehmen
- Alte Metadaten durch neue ersetzen und Alte Metadaten mit der Endung '.bak' beibehalten
- Metadaten sind nach Fertigstellung schreibgeschützt (außer .bak)

Nachdem das P2-Kartenlaufwerk erfolgreich ermittelt wurde, werden im ersten Schritt alle CreationDates der Metadaten erfasst, um den Metadaten im nächsten Schritt die zugehörige Clip-Nr. zuordnen zu können. Anschließend wird die XML-Vorlage für jede auf der P2-Karte vorhandene XML-Datei erneut eingelesen und mit den vorhandenen Inhalten und der Clip-Nr. vervollständigt. Sofern sich in den Tags nur Text (nicht Leer) befindet, wird dieser in die Vorlage übernommen, ansonsten bleibt der Inhalt der Vorlage erhalten. Bei den anderen Vorgaben z.B. 'AUT:' werden explizit alle Inhalte geprüft. D.h., wenn z.B. in "<ProgramName>ANR: ();PNR: ();EB: ();</ProgramName>" eine Angabe fehlt, dann wird kein Inhalt in die Vorlage übernommen, sondern der Inhalt der Vorlage beibehalten.

Konstanten (Const) bei Bedarf anpassen
01.
 Option Explicit 
02.
 
03.
 Const sXmlFolder = "\Metadata"                  'Ordner-Pfad der Xml-Dateien auf P2-Karte 
04.
 
05.
 Const iCountClipNr = 5                          'Anzahl Stellen für Clip-Nr. (z.B. 5 für "00001") 
06.
 
07.
 Const DRIVE_REMOVABLE = 2                       'WMI-Service-DriveTypen 
08.
 Const DRIVE_FIXED = 3 
09.
 Const DRIVE_REMOTE = 4 
10.
 Const DRIVE_CDROM = 5 
11.
 Const DRIVE_RAMDISK = 6 
12.
 
13.
 Const FILE_READONLY = 1                         'Datei-Attribut ReadOnly 
14.
 
15.
 Const sErrMsg1 = "Laufwerk mit Metadaten nicht gefunden!" 
16.
 Const sErrMsg2 = "Datei (%1) enthält kein Erstellungs-Datum" 
17.
 Const sErrMsg3 = "Test-Knoten in Xml-Vorlage nicht vorhanden!" 
18.
 
19.
 Dim oFso, oDrive, oFolder, oFile, oDateList, oDoc, oTemplate, oDocNode, oTemplateNode 
20.
 Dim aNode, aNodes, sTemplate, sSqlDrive, sClipNr, iCountNode, i 
21.
 
22.
'Main Beg 
23.
    'Benötigte Klassen erzeugen 
24.
    Set oFso = CreateObject("Scripting.FileSystemObject") 
25.
    Set oDateList = CreateObject("Scripting.Dictionary") 
26.
    Set oDoc = CreateObject("Microsoft.XMLDOM") 
27.
    Set oTemplate = CreateObject("Microsoft.XMLDOM") 
28.
     
29.
    oDoc.async = False:  oTemplate.async = False 
30.
     
31.
    sSqlDrive = "Select * From Win32_Volume Where Capacity<>NULL And DriveType=" & DRIVE_REMOVABLE 
32.
 
33.
    'P2-Karten-Laufwerk ermitteln 
34.
    For Each oDrive In GetObject("winmgmts:\\.\root\CIMV2").ExecQuery(sSqlDrive) 
35.
        If oFso.FolderExists(oDrive.DriveLetter & sXmlFolder) Then 
36.
            Set oFolder = oFso.GetFolder(oDrive.DriveLetter & sXmlFolder) 
37.
        End If 
38.
    Next 
39.
     
40.
    'Test P2-Karten-Laufwerk gefunden ? 
41.
    If IsEmpty(oFolder) Then Call Abbort(sErrMsg1) 
42.
     
43.
    Call InitTemplate 
44.
     
45.
    'CreationDates der XML-Dateien erfassen/auflisten 
46.
    For Each oFile In oFolder.Files 
47.
        If LCase(oFso.GetExtensionName(oFile.Name)) = "mxf" Then    'xml ? 
48.
            oDoc.Load oFile.Path 
49.
                     
50.
            Set oDocNode = oDoc.DocumentElement.SelectSingleNode("//ClipMetadata/Access/CreationDate") 
51.
                                 
52.
            If oDocNode Is Nothing Then 
53.
                Call Abbort(Replace(sErrMsg2, "%1", oFile.Name)) 
54.
            Else 
55.
                oDateList.Add oDocNode.Text, "" 
56.
            End If 
57.
        End If 
58.
    Next 
59.
     
60.
    'XML-Dateien auswerten, in Vorlage übernehmen und speichern, alte XML-Dateien mit Endung '.bak' sichern 
61.
    For Each oFile In oFolder.Files 
62.
        With oFile 
63.
            If LCase(oFso.GetExtensionName(.Name)) = "mxf" Then     'xml ? 
64.
                oDoc.Load .Path:  oTemplate.loadXML sTemplate 
65.
                 
66.
                For Each aNode In aNodes 
67.
                    Set oTemplateNode = oTemplate.DocumentElement.SelectSingleNode("//ClipMetadata/" & aNode(0)) 
68.
                        
69.
                    If oTemplateNode Is Nothing Then 
70.
                        Call Abbort(sErrMsg3) 
71.
                    Else 
72.
                        Set oDocNode = oDoc.DocumentElement.SelectSingleNode("//ClipMetadata/" & aNode(0)) 
73.
                             
74.
                        If Not oDocNode Is Nothing Then 
75.
                            If oDocNode.nodeName = "CreationDate" Then 
76.
                                sClipNr = GetClipNr(oDocNode.Text) 
77.
                            End If 
78.
                             
79.
                            iCountNode = UBound(aNode) 
80.
                             
81.
                            If iCountNode = 0 And oDocNode.Text <> "" Then 
82.
                                oTemplateNode.Text = oDocNode.Text 
83.
                            ElseIf iCountNode > 0 Then 
84.
                                For i = 1 To iCountNode 
85.
                                    If InStr(1, oDocNode.Text, aNode(i), vbTextCompare) < 1 Then 
86.
                                        Exit For 
87.
                                    End If 
88.
                                Next 
89.
                                If i > iCountNode Then oTemplateNode.Text = oDocNode.Text 
90.
                            End If 
91.
                        End If 
92.
                    End If 
93.
                Next 
94.
                
95.
                With oTemplate.DocumentElement.SelectSingleNode("//ClipMetadata/UserClipName") 
96.
                    .Text = .Text & sClipNr 
97.
                End With 
98.
                               
99.
               .Attributes = .Attributes And Not FILE_READONLY 
100.
                oTemplate.Save .Path 
101.
                oDoc.Save .Path & ".bak" 
102.
               .Attributes = .Attributes Or FILE_READONLY 
103.
            End If 
104.
        End With 
105.
    Next 
106.
 
107.
    MsgBox "Fertig!", vbInformation, "Hinweis . . .":  WScript.Quit 0 
108.
'Main End 
109.
 
110.
 Sub Abbort(ByVal sMsg) 
111.
    MsgBox sMsg, vbExclamation, "Fehler . . .":  WScript.Quit 1 
112.
 End Sub 
113.
  
114.
 Sub InitTemplate() 
115.
    'Xml-Standard-Vorlage erstellen (Leerzeichen ersparen die Zeilenumbrüche) 
116.
    sTemplate = sTemplate & " <ClipMetadata>" 
117.
    sTemplate = sTemplate & "  <UserClipName>BT:();AT:();</UserClipName>" 
118.
    sTemplate = sTemplate & "  <DataSource></DataSource>" 
119.
    sTemplate = sTemplate & "  <Access>" 
120.
    sTemplate = sTemplate & "   <Creator>AUT:();</Creator>" 
121.
    sTemplate = sTemplate & "   <CreationDate></CreationDate>" 
122.
    sTemplate = sTemplate & "   <LastUpdatePerson>RED:();</LastUpdatePerson>" 
123.
    sTemplate = sTemplate & "   <LastUpdateDate></LastUpdateDate>" 
124.
    sTemplate = sTemplate & "  </Access>" 
125.
    sTemplate = sTemplate & "  <Device>" 
126.
    sTemplate = sTemplate & "   <Manufacturer></Manufacturer>" 
127.
    sTemplate = sTemplate & "   <SerialNo.></SerialNo.>" 
128.
    sTemplate = sTemplate & "   <ModelName></ModelName>" 
129.
    sTemplate = sTemplate & "  </Device>" 
130.
    sTemplate = sTemplate & "  <Shoot>" 
131.
    sTemplate = sTemplate & "   <StartDate></StartDate>" 
132.
    sTemplate = sTemplate & "   <EndDate></EndDate>" 
133.
    sTemplate = sTemplate & "   <Location>" 
134.
    sTemplate = sTemplate & "    <PlaceName>ST:();</PlaceName>" 
135.
    sTemplate = sTemplate & "   </Location>" 
136.
    sTemplate = sTemplate & "  </Shoot>" 
137.
    sTemplate = sTemplate & "  <Scenario>" 
138.
    sTemplate = sTemplate & "   <ProgramName>ANR:();PNR:();EB:();</ProgramName>" 
139.
    sTemplate = sTemplate & "  </Scenario>" 
140.
    sTemplate = sTemplate & "  <News>" 
141.
    sTemplate = sTemplate & "   <Reporter>ORT:();</Reporter>" 
142.
    sTemplate = sTemplate & "   <Purpose>KAM:();TON:();</Purpose>" 
143.
    sTemplate = sTemplate & "  </News>" 
144.
    sTemplate = sTemplate & "  <MemoList>" 
145.
    sTemplate = sTemplate & "   <Memo MemoID='0'>" 
146.
    sTemplate = sTemplate & "    <Offset>0</Offset>" 
147.
    sTemplate = sTemplate & "    <Text>B:();</Text>" 
148.
    sTemplate = sTemplate & "   </Memo>" 
149.
    sTemplate = sTemplate & "  </MemoList>" 
150.
    sTemplate = sTemplate & "  <Thumbnail>" 
151.
    sTemplate = sTemplate & "   <FrameOffset>0</FrameOffset>" 
152.
    sTemplate = sTemplate & "   <ThumbnailFormat>BMP</ThumbnailFormat>" 
153.
    sTemplate = sTemplate & "   <Width>80</Width>" 
154.
    sTemplate = sTemplate & "   <Height>60</Height>" 
155.
    sTemplate = sTemplate & "  </Thumbnail>" 
156.
    sTemplate = sTemplate & " </ClipMetadata>" 
157.
 
158.
    'Test-Array - Xml-Knoten mit/ohne Vorgaben (ohne = Tags mit normalen Text-Inhalt) 
159.
    aNodes = Array( _ 
160.
             Array("UserClipName", "BT:", "AT:"), _ 
161.
             Array("DataSource"), _ 
162.
             Array("Access/Creator", "AUT:"), _ 
163.
             Array("Access/CreationDate"), _ 
164.
             Array("Access/LastUpdatePerson", "RED:"), _ 
165.
             Array("Access/LastUpdateDate"), _ 
166.
             Array("Device/Manufacturer"), _ 
167.
             Array("Device/SerialNo."), _ 
168.
             Array("Device/ModelName"), _ 
169.
             Array("Shoot/StartDate"), _ 
170.
             Array("Shoot/EndDate"), _ 
171.
             Array("Shoot/Location/PlaceName", "ST:"), _ 
172.
             Array("Scenario/ProgramName", "ANR:", "PNR:", "EB:"), _ 
173.
             Array("News/Reporter", "ORT:"), _ 
174.
             Array("News/Purpose", "KAM:", "TON:"), _ 
175.
             Array("MemoList/Memo/Offset"), _ 
176.
             Array("MemoList/Memo/Text", "B:"), _ 
177.
             Array("Thumbnail/FrameOffset"), _ 
178.
             Array("Thumbnail/ThumbnailFormat"), _ 
179.
             Array("Thumbnail/Width"), _ 
180.
             Array("Thumbnail/Height")) 
181.
 End Sub 
182.
 
183.
'Diese Funktion gibt die jeweilige Clip-Nr. anhand des Creation-Date zurück 
184.
 Function GetClipNr(ByRef sCreationDate) 
185.
    Dim sDate, iCount 
186.
 
187.
    iCount = 1 
188.
     
189.
    For Each sDate In oDateList.Keys 
190.
        If StrComp(sCreationDate, sDate, vbTextCompare) > 0 Then iCount = iCount + 1 
191.
    Next 
192.
 
193.
    GetClipNr = Right(String(iCountClipNr, "0") & iCount, iCountClipNr) 
194.
 End Function
Gruß Dieter
Bitte warten ..
Mitglied: kylaloo
18.03.2013 um 12:52 Uhr
Lieber Dieter,
das ist ja mal ein Hammer!
Ich werde mich gleich dransetzen und das ganze durchprobieren.
Vielen herzlichen Dank für den Lösungsweg!
Melde mich dann wieder, wenn ich etwas berichten kann!

LG Mathias
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Windows Server
gelöst Word 2010 : Absatz - Abstand per GPO ändern (3)

Frage von johanna-p zum Thema Windows Server ...

Exchange Server
Exchange 2013, Outlook 2010 Standard-Absendeadresse ändern (4)

Frage von ingoue zum Thema Exchange Server ...

E-Mail
gelöst GMail: Anzeige der Mailübersicht ändern (7)

Frage von honeybee zum Thema E-Mail ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (14)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...