sjanssen
Goto Top

PDF Dateien umbennen mit Infos aus einer XML Datei

Hallo,

ich würde gerne PDF Dateien umbennen mit Infos, die ein Script (vorzugsweise VB, weil einfach auf Windows) aus einer XML ausliesst.

Das Script verarbeitet nur Einträge der Publisher ID 5
Liesst dann TAG Airfield aus und benennt aus der Plate ID zB 267575
dann
267575.pdf in AD_2_EDXU_Huettenbusch_1_05JUL18.pdf
um

Also aus Plate ID Wert wird stattdessen der OriginalFilename für die PDF verwendet.
und das in einem vorgegebenen Verzeichnis .

XML und PDFs liegen im gleichen Subdir.

Geht so etwas?

Liebe Grüsse
Stefan

<?xml version="1.0" encoding="utf-8"?>
<AirfieldPlateIndex Produced="20180719110240">
<Publishers>
<Publisher ID="5" Name="DFS" />
<Publisher ID="1" Name="Civil AIP" />
<Publisher ID="3" Name="UK VFR Flight Guide" />
<Publisher ID="6" Name="Pooley's" />
<Publisher ID="12" Name="Military AIP" />
<Publisher ID="7" Name="Skyguide" />
<Publisher ID="4" Name="AvioPortolano" />
<Publisher ID="15" Name="KSAB" />
</Publishers>
<Airfield ICAO="EDXU" ValidityTime="20180719110234">
<Plate ID="267575" Publisher="5" Name="Approach Chart" OriginalFilename="AD_2_EDXU_Huettenbusch_1_05JUL18.pdf" Category="" Size="87308" ProductCode="ebe980f7-fac0-4ada-889b-4115ef2d4394" EffectiveDate="20180705000000" Type="4" Withdrawn="False">
<GeoReferencing>
</GeoReferencing>
</Plate>
<Plate ID="267576" Publisher="5" Name="Aerodrome Chart" OriginalFilename="AD_2_EDXU_Huettenbusch_2_05JUL18.pdf" Category="" Size="435432" ProductCode="ebe980f7-fac0-4ada-889b-4115ef2d4394" EffectiveDate="20180705000000" Type="1" Withdrawn="False" />
</Airfield>
<Airfield ICAO="EDXE" ValidityTime="20180719110234">
<Plate ID="267573" Publisher="5" Name="Approach Chart" OriginalFilename="AD_2_EDXE_Rheine-Eschendorf_1_05JUL18.pdf" Category="" Size="200936" ProductCode="ebe980f7-fac0-4ada-889b-4115ef2d4394" EffectiveDate="20180705000000" Type="4" Withdrawn="False">
<GeoReferencing>
</GeoReferencing>
</Plate>
<Plate ID="267574" Publisher="5" Name="Aerodrome Chart" OriginalFilename="AD_2_EDXE_Rheine-Eschendorf_2_05JUL18.pdf" Category="" Size="89815" ProductCode="ebe980f7-fac0-4ada-889b-4115ef2d4394" EffectiveDate="20180705000000" Type="1" Withdrawn="False" />
</Airfield>
<Airfield ICAO="EDUF" ValidityTime="20180719110234">
<Plate ID="267568" Publisher="5" Name="Approach Chart" OriginalFilename="AD_2_EDUF_Falkenberg-Loennewitz_1_05JUL18.pdf" Category="" Size="141188" ProductCode="ebe980f7-fac0-4ada-889b-4115ef2d4394" EffectiveDate="20180705000000" Type="4" Withdrawn="False">
<GeoReferencing>
</GeoReferencing>
</Plate>
<Plate ID="267569" Publisher="5" Name="Aerodrome Chart" OriginalFilename="AD_2_EDUF_Falkenberg-Loennewitz_2_05JUL18.pdf" Category="" Size="467408" ProductCode="ebe980f7-fac0-4ada-889b-4115ef2d4394" EffectiveDate="20180705000000" Type="1" Withdrawn="False">
<GeoReferencing>
</GeoReferencing>
</Plate>
</Airfield>
<Airfield ICAO="EDTZ" ValidityTime="20180719110234">
<Plate ID="267566" Publisher="5" Name="Approach Chart" OriginalFilename="AD_2_EDTZ_Konstanz_1_05JUL18.pdf" Category="" Size="324509" ProductCode="ebe980f7-fac0-4ada-889b-4115ef2d4394" EffectiveDate="20180705000000" Type="4" Withdrawn="False">
<GeoReferencing>
</GeoReferencing>
</Plate>
<Plate ID="267567" Publisher="5" Name="Aerodrome Chart" OriginalFilename="AD_2_EDTZ_Konstanz_2_08AUG13.pdf" Category="" Size="90309" ProductCode="ebe980f7-fac0-4ada-889b-4115ef2d4394" EffectiveDate="20130808000000" Type="1" Withdrawn="False">
<GeoReferencing>
</GeoReferencing>
</Plate>
</Airfield>
</AirfieldPlateIndex>

Content-Key: 380745

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

Printed on: April 26, 2024 at 14:04 o'clock

Member: colinardo
Solution colinardo Jul 19, 2018 updated at 13:13:44 (UTC)
Goto Top
Servus Stefan,
Geht so etwas?
klar, auch wenn ich das inzwischen mit einem PS-Einzeiler abfackeln würde ... aber auch mit dem althergebrachten VBS ist das kein Problem, wenn auch etwas mehr Tipparbeit, guckst du:
(Kommentare siehe Quellcode)
'Variablen  
Dim ORDNER, XMLPATH, fso, xmldoc, nodes, node, strID, strOrigName, strPDFPathOld, strPDFPathNew
' Ordner mit den Dateien  
ORDNER = "D:\Platten"  
' Pfad der XML Datei im Ordner  
XMLPATH = ORDNER & "\daten.xml"  
' Objekte erstellen  
Set fso = CreateObject("Scripting.Filesystemobject")  
Set xmldoc = CreateObject("msxml2.domdocument.6.0")  
' XMLDoc Eigenschaften setzen und Dokument laden  
xmlDoc.async = False
xmldoc.load XMLPATH
' Nodes selektieren  
Set nodes = xmldoc.selectNodes("/AirfieldPlateIndex/Airfield/Plate[@Publisher='5']")  
' Wenn passende Nodes vorhanden ...  
If Not nodes Is Nothing Then
	' Für jeden Node ...  
	For Each node In nodes
		' ID auslesen  
		strID = node.attributes.getNamedItem("ID").text  
		' OriginalPfad auslesen  
		strOrigName = node.attributes.getNamedItem("OriginalFilename").text  
		' Pfade zusammensetzen für aktuelles PDF und neuer Name  
		strPDFPathOld = ORDNER & "\" & strID & ".pdf"  
		strPDFPathNew = ORDNER & "\" & strOrigName  
		' Wenn PDF mit der ID existiert, benenne es um  
		If fso.FileExists(strPDFPathOld) Then fso.MoveFile strPDFPathOld,strPDFPathNew
	Next
End If
' Ende  
MsgBox "Fertig"  
Grüße Uwe

p.s. fürs nächste mal => Bitte nutze Code-Tags für deinen Quellcode: <code> Quellcode </code>. Merci.
Member: sjanssen
sjanssen Jul 19, 2018 at 17:16:01 (UTC)
Goto Top
Uwe,
das sieht super professionell aus.
Ich hab einen Fehler gemacht.
Ich dachte ich könnte dein Script einfach so in der DOS Box ausführen.

Geht das auch für Script Kiddies wie mich?

Wie starte ich das?

Lieben Gruss
Stefan
Member: colinardo
Solution colinardo Jul 19, 2018, updated at Jul 21, 2018 at 15:53:36 (UTC)
Goto Top
Zitat von @sjanssen:
Ich dachte ich könnte dein Script einfach so in der DOS Box ausführen.
Nöp.
Geht das auch für Script Kiddies wie mich?

Wie starte ich das?
Pfade anpassen, Text als *.vbs speichern, Doppelklick drauf, fertig.
Oder über die Kommandozeile dann ausführen mit
cscript //Nologo "c:\script.vbs"

Also das ist jetzt doch schon etwas peinlich muss ich gestehen, hier mit VBS anzukommen und dann noch nicht mal diese Basics zu beherrschen.
Member: sjanssen
sjanssen Jul 19, 2018 at 20:59:28 (UTC)
Goto Top
Hallo Uwe,

danke für den zielführenden Anstoß.
Ich habs mit Änderung des Regkey jetzt hin bekommen.

Lösung
regedit -> HKEY_CLASSES_ROOT\.vbs -> (Standart) auf „VBSFile“ setzen.
Dann geht alles wieder.

Ganz lieben Dank für deine schnelle Hilfe.
Top Service.

Gruss Stefan
Member: colinardo
Solution colinardo Jul 20, 2018 updated at 09:38:10 (UTC)
Goto Top
Kein Problem. Zum Unterstützen sind wir da face-smile.

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.