XML-Datei: Pfade suchen, verlinkte Dateien kopieren und Pfade ändern
Hallo,
das Programm "Solidworks Composer" speichert Pfadangaben verlinkter Dateien in Projektdateien. Ich möchte nun diese Projektdateien inklusive aller verlinkten Dateien sichern (In Indesign heißt diese Funktion "Verpacken"). Eine solche Funktion bietet das Programm leider nicht an.
Daher suche ich eine Möglichkeit, in der XML-Projektdatei (projekt.smgXml)
a) die Pfade zu finden (IsInstanceOf="..\..\..\..\..\BA\123.xml") ...es sind i.d.R. mehrere
b) die dort erwähnten Dateien in ein separates, neu zu erstellendes Unterverzeichnis "Links" zu kopieren
c) den Pfad in der XML-Projektdatei auf das neue Verzeichnis "Links" zu ändern (ändern zu: IsInstanceOf="\links\123.xml") und
d) die Projektdatei unter einem anderen Namen zu speichern (projekt_links.smgXml)
Hier ein Ausschnitt der Ursrünglichen smgXml-Datei:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><DocumentSMG Version="7.000000" VersionSeemage="7.0.2.2836"><CLitAssyGroup Ident="AV_TS8XXX-T-1-TS8-E01_ASM" IsInstanceOf="..\..\..\..\..\BA123.xml" NodeType="0"><Neutral><Actor.Location><Frame/><Pivot><Origin X="92.78575" Y="1015.802" Z="41.96082"/><VX X="1" Y="0" Z="0"/><VY X="0" Y="1" Z="0"/></Pivot></Actor.Location><Actor.Name Value="V_TS8XXX-T-1-TS8-E01_ASM"/></Neutral></CLitAssyGroup></DocumentSMG>
Ich arbeite mit Windows 7 und ich vermute, das könnte mit vbs funktionieren, habe leider jedoch hier noch keine ausreichende Erfahrung und bitte daher um Hilfe.
Vielen Dank im Voraus.
das Programm "Solidworks Composer" speichert Pfadangaben verlinkter Dateien in Projektdateien. Ich möchte nun diese Projektdateien inklusive aller verlinkten Dateien sichern (In Indesign heißt diese Funktion "Verpacken"). Eine solche Funktion bietet das Programm leider nicht an.
Daher suche ich eine Möglichkeit, in der XML-Projektdatei (projekt.smgXml)
a) die Pfade zu finden (IsInstanceOf="..\..\..\..\..\BA\123.xml") ...es sind i.d.R. mehrere
b) die dort erwähnten Dateien in ein separates, neu zu erstellendes Unterverzeichnis "Links" zu kopieren
c) den Pfad in der XML-Projektdatei auf das neue Verzeichnis "Links" zu ändern (ändern zu: IsInstanceOf="\links\123.xml") und
d) die Projektdatei unter einem anderen Namen zu speichern (projekt_links.smgXml)
Hier ein Ausschnitt der Ursrünglichen smgXml-Datei:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><DocumentSMG Version="7.000000" VersionSeemage="7.0.2.2836"><CLitAssyGroup Ident="AV_TS8XXX-T-1-TS8-E01_ASM" IsInstanceOf="..\..\..\..\..\BA123.xml" NodeType="0"><Neutral><Actor.Location><Frame/><Pivot><Origin X="92.78575" Y="1015.802" Z="41.96082"/><VX X="1" Y="0" Z="0"/><VY X="0" Y="1" Z="0"/></Pivot></Actor.Location><Actor.Name Value="V_TS8XXX-T-1-TS8-E01_ASM"/></Neutral></CLitAssyGroup></DocumentSMG>
Ich arbeite mit Windows 7 und ich vermute, das könnte mit vbs funktionieren, habe leider jedoch hier noch keine ausreichende Erfahrung und bitte daher um Hilfe.
Vielen Dank im Voraus.
Please also mark the comments that contributed to the solution of the article
Content-Key: 306541
Url: https://administrator.de/contentid/306541
Printed on: May 4, 2024 at 13:05 o'clock
4 Comments
Latest comment
Hallo ELEVATOR,
mit einem kleinen Powershell-Skript schnell gemacht (Kommentare findest du im Skript für jede Zeile):
Gehe ich in der Annahme das die Pfade in den XML Dateien alles Relative sind statt Absolute ?
Grüße Uwe
mit einem kleinen Powershell-Skript schnell gemacht (Kommentare findest du im Skript für jede Zeile):
Gehe ich in der Annahme das die Pfade in den XML Dateien alles Relative sind statt Absolute ?
# Ordner der die SMGXML Dateien enthält (wird rekursiv durchsucht)
$folderSource = 'C:\Projekte'
# Ordner der im Anschluss die Projekte enthält (für jede XML-Projektdatei wird ein neuer Ordner darin erstellt)
$folderTarget = 'D:\Projekt-Backup'
# Finde alle *.smgxml Dateien in Quellordner
gci $folderSource -Filter *.smgxml -recurse | %{
$xmldir = $_.DirectoryName
# Name des Projektordners = Basename der Datei
$projectTargetFolder = "$folderTarget\$($_.Basename)"
# Unterordner Links im Projektordner
$projectTargetFolderLinks = "$projectTargetFolder\Links"
# Erstelle Ordner falls noch nicht vorhanden
If(!(Test-Path $projectTargetFolderLinks)){md "$projectTargetFolderLinks" -Force | out-null}
#XML Datei auslesen und alle Instanzen des Attributs 'IsInstanceOf' finden
$xml = New-Object XML; $xml.Load($_.Fullname)
$xml.SelectNodes('//*[@IsInstanceOf]') | %{
# Datei der Ressource in den Zielordner kopieren
copy-item ([System.IO.Path]::Combine($xmldir,$_.IsInstanceOf)) -Destination $projectTargetFolderLinks
# Link in der XML-Datei aktualisieren
$_.IsInstanceOf = ".\Links\$([System.IO.Path]::GetFileName($_.IsInstanceOf))"
}
# geänderte SMGXML-Datei im Zielordner speichern nach Schema {BASENAME}_LINKS.{EXTENSION}
$xml.Save("$projectTargetFolder\$($_.Basename)_links$($_.Extension)")
}