tardezyx
Goto Top

XML-Inhalt zur Ordner- und Dateiumbenennung nutzen

Hallo,

in zahlreichen Unterordnern befindet sich jeweils genau eine XML-Datei derselben Grammatik, von denen ich <title> und <year> gerne zum Umbenennen des Unterordners und aller dort vorhandenen Dateien nutzen möchte (Dateiendungen sind immer unique - es ist also kein Problem, sie gleich zu benennen). Derzeit mache ich das mühsam manuell.

Beispiel Ordnerstruktur:

Suchverzeichnis
- Subdir 1
--- Subfile 1.* (Datendatei, Dateityp unbekannt/unwichtig)
--- Subfile 1.nfo (die XML)
- Subdir 2
--- Subfile 2.* (Datendatei, Dateityp unbekannt/unwichtig)
--- Subfile 2.nfo (die XML)
- usw. usf.

Subfile 1.nfo enthält nun folgende Informationen:

<?xml version="1.0" encoding="utf-8"?>  
<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  <id>tt1276962</id>
  <title>Projekt ASDF</title>
...
  <year>2005</year>
...
</entry>

Es soll daraufhin "Subdir 1" wie folgt umbenannt werden:

Suchverzeichnis
- Projekt ASDF (2005)
--- Projekt ASDF (2005).* (Datendatei, Dateityp unbekannt/unwichtig)
--- Projekt ASDF (2005).nfo (die XML)
- Subdir 2
--- Subfile 2.* (Datendatei, Dateityp unbekannt/unwichtig)
--- Subfile 2.nfo (die XML)
- usw. usf.

Es sollen also <title> und <year> zu einem String verknüpft und dabei <year> umklammert werden. Hinzu kommt aber eine Besonderheit durch die Ordner- & Dateinamensbeschränkung des Betriebssystems, bei der bestimmte Zeichen nicht erlaubt sind. Diese Zeichen kommen freilich nur im <title> vor und müssten im String wie folgt ersetzt werden:

- "<" mit "("
- ">" mit ")"
- "/" mit "-"
- "|" mit "-"
- "\" mit "-"
- ":" mit " -" (inkl. Leerzeichen vor dem "-")
- "*" mit "" (also weg)
- "?" mit "" (also weg)

Ferner können (bei einer späteren Nachpflege) in den Unterordnern die folgenden drei Dateien mit bestimmten Endungen vorkommen, dies wären:

Projekt ASDF (2005)-poster.*
Projekt ASDF (2005)-fanart.*
Projekt ASDF (2005)-trailer.*

Diese Endungen (-poster, -fanart, -trailer) müssten bei der Umbenennung erhalten bleiben.

Danke und Gruß!

Content-ID: 241300

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

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

colinardo
Lösung colinardo 19.06.2014, aktualisiert am 20.06.2014 um 20:31:21 Uhr
Goto Top
Moin tardezyx,
wenn Powershell nichts ausmacht, könnte das so aussehen:
# Suchverzeichnis
$rootFolder = "D:\Projekte"  
$nfofiles = dir "$rootFolder\*.nfo" -Recurse | ?{!$_.PSIscontainer}  
foreach($nfo in $nfofiles){
    # Infos aus XML-Datei holen
    $xml = New-Object XML
    $xml.Load($nfo.FullName)
    $title = $xml.SelectSingleNode("/entry/title").InnerText  
    $year = $xml.SelectSingleNode("/entry/year").InnerText  
    
    # Replacements
    $title = $title.Replace("<","(").Replace(">",")").Replace(":"," -").Replace("*","").Replace("?","")  
    $title = ([Regex]'[/|\\]').Replace($title,"-")  
    
    # Dateien umbenennen
    $files = dir "$($nfo.Directory)\*.*"  
    foreach($file in $files){
        if(($file.BaseName -match '-poster$|-fanart$|-trailer$')){  
            $split = $file.BaseName.Split("-")  
            $specialEnd = $split[$($split.Length -1)]
            $newname = "$title ($year)-$specialEnd$($file.Extension)"  
        }else{
            $newname = "$title ($year)$($file.Extension)"  
        }
        rename-item $file.FullName -NewName $newname
    }

    # Ordner umbenennen
    rename-item $nfo.Directory "$title ($year)"  
}
Grüße Uwe
Endoro
Endoro 19.06.2014 um 13:59:05 Uhr
Goto Top
Hey,
das ist mit reinem Batch auch zu machen.
Es ist aber reichlich aufwendig, das zu damit schreiben und zu testen.
Nimm die Lösung von @colinardo.
Gruss, Endoro
tardezyx
tardezyx 20.06.2014 um 20:22:19 Uhr
Goto Top
Hi Uwe,

danke - funktioniert hervorragend.

Gruß!