kylaloo
Goto Top

Kann eine Batchdatei Metadaten auf P2 Karten ändern?

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

Content-Key: 202274

Url: https://administrator.de/contentid/202274

Printed on: May 6, 2024 at 05:05 o'clock

Member: bastla
bastla Feb 24, 2013 at 16:02:06 (UTC)
Goto Top
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
Member: kylaloo
kylaloo Feb 25, 2013 at 02:51:19 (UTC)
Goto Top
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.

 
 <ClipMetadata>
      <UserClipName>BT:18.02.2013 2er Bereitschaft / 1030 Uhr;AT:News 2013;0002</UserClipName>
      <DataSource>SHOOTING</DataSource>
      <Access>
        <Creator>AUT:();</Creator>
        <CreationDate>2013-02-19T16:03:39+01:00</CreationDate>
        <LastUpdatePerson>RED:Sascha Neuner;</LastUpdatePerson>
        <LastUpdateDate>2013-02-19T16:04:20+01:00</LastUpdateDate>
      </Access>
      <Device>
        <Manufacturer>Panasonic</Manufacturer>
        <SerialNo.>F8TKB0668</SerialNo.>
        <ModelName>AJ-HPX2100E</ModelName>
      </Device>
      <Shoot>
        <StartDate>2013-02-19T16:03:39+01:00</StartDate>
        <EndDate>2013-02-19T16:04:20+01:00</EndDate>
        <Location>
          <PlaceName>ST:Fussballspiel;</PlaceName>
        </Location>
      </Shoot>
      <Scenario>
        <ProgramName>ANR:13447616;PNR:28312254;EB:02;</ProgramName>
      </Scenario>
      <News>
        <Reporter>ORT:();</Reporter>
        <Purpose>KAM:Meyer;TON:Strauss;</Purpose>
      </News>
Member: bastla
bastla Feb 25, 2013 updated at 14:16:30 (UTC)
Goto Top
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
Member: kylaloo
kylaloo Feb 26, 2013 at 11:39:55 (UTC)
Goto Top
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
Member: bastla
bastla Feb 26, 2013 at 13:06:23 (UTC)
Goto Top
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
Member: Lochkartenstanzer
Lochkartenstanzer Feb 26, 2013 at 13:16:37 (UTC)
Goto Top
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
Member: kylaloo
kylaloo Feb 26, 2013 at 14:12:04 (UTC)
Goto Top
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.

face-smile Mathias
Member: kylaloo
kylaloo Feb 26, 2013 at 17:19:43 (UTC)
Goto Top
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?)

 <ClipMetadata> </ClipMetadata> 



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


 

<ClipMetadata>
      <UserClipName>060A2B340101010501010D43130000007DE3A35B486305F00080458228E3440D</UserClipName>
      <DataSource>SHOOTING</DataSource>
      <Access>
        <CreationDate>2013-02-25T09:53:50+01:00</CreationDate>
        <LastUpdateDate>2013-02-25T09:53:57+01:00</LastUpdateDate>
      </Access>
      <Device>
        <Manufacturer>Panasonic</Manufacturer>
        <SerialNo.>C9TCA0093</SerialNo.>
        <ModelName>AG-HPX171E</ModelName>
      </Device>
      <Shoot>
        <StartDate>2013-02-25T09:53:50+01:00</StartDate>
        <EndDate>2013-02-25T09:53:57+01:00</EndDate>
      </Shoot>
      <Thumbnail>
        <FrameOffset>0</FrameOffset>
        <ThumbnailFormat>BMP</ThumbnailFormat>
        <Width>80</Width>
        <Height>60</Height>
      </Thumbnail>
    </ClipMetadata>



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

<ClipMetadata>
      <UserClipName>BT:();AT:();0017</UserClipName>
      <DataSource>SHOOTING</DataSource>
      <Access>
        <Creator>AUT:Mathias Hundt;</Creator>
        <CreationDate>2013-02-19T11:03:27+00:00</CreationDate>
        <LastUpdatePerson>RED:Mathias Hundt;</LastUpdatePerson>
        <LastUpdateDate>2013-02-19T11:03:33+00:00</LastUpdateDate>
      </Access>
      <Device>
        <Manufacturer>Panasonic</Manufacturer>
        <SerialNo.>J2TCB0104</SerialNo.>
        <ModelName>AG-HPX250EJ</ModelName>
      </Device>
      <Shoot>
        <StartDate>2013-02-19T11:03:28+00:00</StartDate>
        <EndDate>2013-02-19T11:03:33+00:00</EndDate>
        <Location>
          <PlaceName>ST:Hundts neuer Film;</PlaceName>
        </Location>
      </Shoot>
      <Scenario>
        <ProgramName>ANR:();PNR:();EB:();</ProgramName>
      </Scenario>
      <News>
        <Reporter>ORT:Frankfurt;</Reporter>
        <Purpose>KAM:Hundt;TON:Hundt;</Purpose>
      </News>
      <MemoList>
        <Memo MemoID="0">  
          <Offset>0</Offset>
          <Text>B:();</Text>
        </Memo>
      </MemoList>
      <Thumbnail>
        <FrameOffset>0</FrameOffset>
        <ThumbnailFormat>BMP</ThumbnailFormat>
        <Width>80</Width>
        <Height>60</Height>
      </Thumbnail>
    </ClipMetadata>



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.
Member: Pjordorf
Pjordorf Feb 26, 2013 at 22:16:29 (UTC)
Goto Top
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
Member: kylaloo
kylaloo Feb 27, 2013 at 02:47:57 (UTC)
Goto Top
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.
Mitglied: 76109
76109 Feb 28, 2013 at 09:55:49 (UTC)
Goto Top
Hallo kylaloo!

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


Gruß Dieter
Member: kylaloo
kylaloo Mar 01, 2013 at 23:54:05 (UTC)
Goto Top
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
Mitglied: 76109
76109 Mar 17, 2013 updated at 10:06:27 (UTC)
Goto Top
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
 Option Explicit

 Const sXmlFolder = "\Metadata"                  'Ordner-Pfad der Xml-Dateien auf P2-Karte  

 Const iCountClipNr = 5                          'Anzahl Stellen für Clip-Nr. (z.B. 5 für "00001")  

 Const DRIVE_REMOVABLE = 2                       'WMI-Service-DriveTypen  
 Const DRIVE_FIXED = 3
 Const DRIVE_REMOTE = 4
 Const DRIVE_CDROM = 5
 Const DRIVE_RAMDISK = 6

 Const FILE_READONLY = 1                         'Datei-Attribut ReadOnly  

 Const sErrMsg1 = "Laufwerk mit Metadaten nicht gefunden!"  
 Const sErrMsg2 = "Datei (%1) enthält kein Erstellungs-Datum"  
 Const sErrMsg3 = "Test-Knoten in Xml-Vorlage nicht vorhanden!"  

 Dim oFso, oDrive, oFolder, oFile, oDateList, oDoc, oTemplate, oDocNode, oTemplateNode
 Dim aNode, aNodes, sTemplate, sSqlDrive, sClipNr, iCountNode, i

'Main Beg  
    'Benötigte Klassen erzeugen  
    Set oFso = CreateObject("Scripting.FileSystemObject")  
    Set oDateList = CreateObject("Scripting.Dictionary")  
    Set oDoc = CreateObject("Microsoft.XMLDOM")  
    Set oTemplate = CreateObject("Microsoft.XMLDOM")  
    
    oDoc.async = False:  oTemplate.async = False
    
    sSqlDrive = "Select * From Win32_Volume Where Capacity<>NULL And DriveType=" & DRIVE_REMOVABLE  

    'P2-Karten-Laufwerk ermitteln  
    For Each oDrive In GetObject("winmgmts:\\.\root\CIMV2").ExecQuery(sSqlDrive)  
        If oFso.FolderExists(oDrive.DriveLetter & sXmlFolder) Then
            Set oFolder = oFso.GetFolder(oDrive.DriveLetter & sXmlFolder)
        End If
    Next
    
    'Test P2-Karten-Laufwerk gefunden ?  
    If IsEmpty(oFolder) Then Call Abbort(sErrMsg1)
    
    Call InitTemplate
    
    'CreationDates der XML-Dateien erfassen/auflisten  
    For Each oFile In oFolder.Files
        If LCase(oFso.GetExtensionName(oFile.Name)) = "mxf" Then    'xml ?  
            oDoc.Load oFile.Path
                    
            Set oDocNode = oDoc.DocumentElement.SelectSingleNode("//ClipMetadata/Access/CreationDate")  
                                
            If oDocNode Is Nothing Then
                Call Abbort(Replace(sErrMsg2, "%1", oFile.Name))  
            Else
                oDateList.Add oDocNode.Text, ""  
            End If
        End If
    Next
    
    'XML-Dateien auswerten, in Vorlage übernehmen und speichern, alte XML-Dateien mit Endung '.bak' sichern  
    For Each oFile In oFolder.Files
        With oFile
            If LCase(oFso.GetExtensionName(.Name)) = "mxf" Then     'xml ?  
                oDoc.Load .Path:  oTemplate.loadXML sTemplate
                
                For Each aNode In aNodes
                    Set oTemplateNode = oTemplate.DocumentElement.SelectSingleNode("//ClipMetadata/" & aNode(0))  
                       
                    If oTemplateNode Is Nothing Then
                        Call Abbort(sErrMsg3)
                    Else
                        Set oDocNode = oDoc.DocumentElement.SelectSingleNode("//ClipMetadata/" & aNode(0))  
                            
                        If Not oDocNode Is Nothing Then
                            If oDocNode.nodeName = "CreationDate" Then  
                                sClipNr = GetClipNr(oDocNode.Text)
                            End If
                            
                            iCountNode = UBound(aNode)
                            
                            If iCountNode = 0 And oDocNode.Text <> "" Then  
                                oTemplateNode.Text = oDocNode.Text
                            ElseIf iCountNode > 0 Then
                                For i = 1 To iCountNode
                                    If InStr(1, oDocNode.Text, aNode(i), vbTextCompare) < 1 Then
                                        Exit For
                                    End If
                                Next
                                If i > iCountNode Then oTemplateNode.Text = oDocNode.Text
                            End If
                        End If
                    End If
                Next
               
                With oTemplate.DocumentElement.SelectSingleNode("//ClipMetadata/UserClipName")  
                    .Text = .Text & sClipNr
                End With
                              
               .Attributes = .Attributes And Not FILE_READONLY
                oTemplate.Save .Path
                oDoc.Save .Path & ".bak"  
               .Attributes = .Attributes Or FILE_READONLY
            End If
        End With
    Next

    MsgBox "Fertig!", vbInformation, "Hinweis . . .":  WScript.Quit 0  
'Main End  

 Sub Abbort(ByVal sMsg)
    MsgBox sMsg, vbExclamation, "Fehler . . .":  WScript.Quit 1  
 End Sub
 
 Sub InitTemplate()
    'Xml-Standard-Vorlage erstellen (Leerzeichen ersparen die Zeilenumbrüche)  
    sTemplate = sTemplate & " <ClipMetadata>"  
    sTemplate = sTemplate & "  <UserClipName>BT:();AT:();</UserClipName>"  
    sTemplate = sTemplate & "  <DataSource></DataSource>"  
    sTemplate = sTemplate & "  <Access>"  
    sTemplate = sTemplate & "   <Creator>AUT:();</Creator>"  
    sTemplate = sTemplate & "   <CreationDate></CreationDate>"  
    sTemplate = sTemplate & "   <LastUpdatePerson>RED:();</LastUpdatePerson>"  
    sTemplate = sTemplate & "   <LastUpdateDate></LastUpdateDate>"  
    sTemplate = sTemplate & "  </Access>"  
    sTemplate = sTemplate & "  <Device>"  
    sTemplate = sTemplate & "   <Manufacturer></Manufacturer>"  
    sTemplate = sTemplate & "   <SerialNo.></SerialNo.>"  
    sTemplate = sTemplate & "   <ModelName></ModelName>"  
    sTemplate = sTemplate & "  </Device>"  
    sTemplate = sTemplate & "  <Shoot>"  
    sTemplate = sTemplate & "   <StartDate></StartDate>"  
    sTemplate = sTemplate & "   <EndDate></EndDate>"  
    sTemplate = sTemplate & "   <Location>"  
    sTemplate = sTemplate & "    <PlaceName>ST:();</PlaceName>"  
    sTemplate = sTemplate & "   </Location>"  
    sTemplate = sTemplate & "  </Shoot>"  
    sTemplate = sTemplate & "  <Scenario>"  
    sTemplate = sTemplate & "   <ProgramName>ANR:();PNR:();EB:();</ProgramName>"  
    sTemplate = sTemplate & "  </Scenario>"  
    sTemplate = sTemplate & "  <News>"  
    sTemplate = sTemplate & "   <Reporter>ORT:();</Reporter>"  
    sTemplate = sTemplate & "   <Purpose>KAM:();TON:();</Purpose>"  
    sTemplate = sTemplate & "  </News>"  
    sTemplate = sTemplate & "  <MemoList>"  
    sTemplate = sTemplate & "   <Memo MemoID='0'>"  
    sTemplate = sTemplate & "    <Offset>0</Offset>"  
    sTemplate = sTemplate & "    <Text>B:();</Text>"  
    sTemplate = sTemplate & "   </Memo>"  
    sTemplate = sTemplate & "  </MemoList>"  
    sTemplate = sTemplate & "  <Thumbnail>"  
    sTemplate = sTemplate & "   <FrameOffset>0</FrameOffset>"  
    sTemplate = sTemplate & "   <ThumbnailFormat>BMP</ThumbnailFormat>"  
    sTemplate = sTemplate & "   <Width>80</Width>"  
    sTemplate = sTemplate & "   <Height>60</Height>"  
    sTemplate = sTemplate & "  </Thumbnail>"  
    sTemplate = sTemplate & " </ClipMetadata>"  

    'Test-Array - Xml-Knoten mit/ohne Vorgaben (ohne = Tags mit normalen Text-Inhalt)  
    aNodes = Array( _
             Array("UserClipName", "BT:", "AT:"), _  
             Array("DataSource"), _  
             Array("Access/Creator", "AUT:"), _  
             Array("Access/CreationDate"), _  
             Array("Access/LastUpdatePerson", "RED:"), _  
             Array("Access/LastUpdateDate"), _  
             Array("Device/Manufacturer"), _  
             Array("Device/SerialNo."), _  
             Array("Device/ModelName"), _  
             Array("Shoot/StartDate"), _  
             Array("Shoot/EndDate"), _  
             Array("Shoot/Location/PlaceName", "ST:"), _  
             Array("Scenario/ProgramName", "ANR:", "PNR:", "EB:"), _  
             Array("News/Reporter", "ORT:"), _  
             Array("News/Purpose", "KAM:", "TON:"), _  
             Array("MemoList/Memo/Offset"), _  
             Array("MemoList/Memo/Text", "B:"), _  
             Array("Thumbnail/FrameOffset"), _  
             Array("Thumbnail/ThumbnailFormat"), _  
             Array("Thumbnail/Width"), _  
             Array("Thumbnail/Height"))  
 End Sub

'Diese Funktion gibt die jeweilige Clip-Nr. anhand des Creation-Date zurück  
 Function GetClipNr(ByRef sCreationDate)
    Dim sDate, iCount

    iCount = 1
    
    For Each sDate In oDateList.Keys
        If StrComp(sCreationDate, sDate, vbTextCompare) > 0 Then iCount = iCount + 1
    Next

    GetClipNr = Right(String(iCountClipNr, "0") & iCount, iCountClipNr)  
 End Function

Gruß Dieter
Member: kylaloo
kylaloo Mar 18, 2013 at 11:52:24 (UTC)
Goto Top
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