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:
Subfile 1.nfo enthält nun folgende Informationen:
Es soll daraufhin "Subdir 1" wie folgt umbenannt werden:
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ß!
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ß!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 241300
Url: https://administrator.de/contentid/241300
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
3 Kommentare
Neuester Kommentar
Moin tardezyx,
wenn Powershell nichts ausmacht, könnte das so aussehen:
Grüße Uwe
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)"
}
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
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