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, 1054 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 ..
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte
Firewall
Welche Firewall ? (18)

Frage von Cyberurmel zum Thema Firewall ...

Windows Server
gelöst Einzelnes Windows Update über GPO deinstallieren (16)

Frage von lordofremixes zum Thema Windows Server ...

Windows Server
GPO zum Deinstallieren von Office Update wird nicht ausgeführt (15)

Frage von lordofremixes zum Thema Windows Server ...