Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

XML-Inhalt zur Ordner- und Dateiumbenennung nutzen

Frage Entwicklung Batch & Shell

Mitglied: tardezyx

tardezyx (Level 1) - Jetzt verbinden

18.06.2014, aktualisiert 20.06.2014, 1030 Aufrufe, 3 Kommentare

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:

01.
Suchverzeichnis 
02.
- Subdir 1 
03.
--- Subfile 1.* (Datendatei, Dateityp unbekannt/unwichtig) 
04.
--- Subfile 1.nfo (die XML) 
05.
- Subdir 2 
06.
--- Subfile 2.* (Datendatei, Dateityp unbekannt/unwichtig) 
07.
--- Subfile 2.nfo (die XML) 
08.
- usw. usf.
Subfile 1.nfo enthält nun folgende Informationen:

01.
<?xml version="1.0" encoding="utf-8"?> 
02.
<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
03.
  <id>tt1276962</id> 
04.
  <title>Projekt ASDF</title> 
05.
... 
06.
  <year>2005</year> 
07.
... 
08.
</entry>
Es soll daraufhin "Subdir 1" wie folgt umbenannt werden:

01.
Suchverzeichnis 
02.
- Projekt ASDF (2005) 
03.
--- Projekt ASDF (2005).* (Datendatei, Dateityp unbekannt/unwichtig) 
04.
--- Projekt ASDF (2005).nfo (die XML) 
05.
- Subdir 2 
06.
--- Subfile 2.* (Datendatei, Dateityp unbekannt/unwichtig) 
07.
--- Subfile 2.nfo (die XML) 
08.
- 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ß!
Mitglied: colinardo
LÖSUNG 19.06.2014, aktualisiert 20.06.2014
Moin tardezyx,
wenn Powershell nichts ausmacht, könnte das so aussehen:
01.
# Suchverzeichnis 
02.
$rootFolder = "D:\Projekte" 
03.
$nfofiles = dir "$rootFolder\*.nfo" -Recurse | ?{!$_.PSIscontainer} 
04.
foreach($nfo in $nfofiles){ 
05.
    # Infos aus XML-Datei holen 
06.
    $xml = New-Object XML 
07.
    $xml.Load($nfo.FullName) 
08.
    $title = $xml.SelectSingleNode("/entry/title").InnerText 
09.
    $year = $xml.SelectSingleNode("/entry/year").InnerText 
10.
     
11.
    # Replacements 
12.
    $title = $title.Replace("<","(").Replace(">",")").Replace(":"," -").Replace("*","").Replace("?","") 
13.
    $title = ([Regex]'[/|\\]').Replace($title,"-") 
14.
     
15.
    # Dateien umbenennen 
16.
    $files = dir "$($nfo.Directory)\*.*" 
17.
    foreach($file in $files){ 
18.
        if(($file.BaseName -match '-poster$|-fanart$|-trailer$')){ 
19.
            $split = $file.BaseName.Split("-") 
20.
            $specialEnd = $split[$($split.Length -1)] 
21.
            $newname = "$title ($year)-$specialEnd$($file.Extension)" 
22.
        }else{ 
23.
            $newname = "$title ($year)$($file.Extension)" 
24.
25.
        rename-item $file.FullName -NewName $newname 
26.
27.
 
28.
    # Ordner umbenennen 
29.
    rename-item $nfo.Directory "$title ($year)" 
30.
}
Grüße Uwe
Bitte warten ..
Mitglied: Endoro
19.06.2014 um 13:59 Uhr
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
Bitte warten ..
Mitglied: tardezyx
20.06.2014 um 20:22 Uhr
Hi Uwe,

danke - funktioniert hervorragend.

Gruß!
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...