Skript: NAME einer Textdatei in eine XML-Datei im gleichen HDD-Ordner eintragen?

rloxley

Grünschnabel
Dies ist z.B. ein powershell-Skript, mit dem ich die TITEL der Unterordner auslesen lassen kann, in denen die Dokus jeweils liegen und in den "title-tag" der *.nfo in den jeweiligen Unterordnern schreiben lassen kann. Die Unterordner haben IMMER den gleichen Titel wie die Doku IM Unterordner:

@Echo off
set "ordner=C:\000"
powershell -ExecutionPolicy ByPass -NoProfile -Command "gci "%ordner%" -Filter *.nfo -Recurse -Force | %%{(gc $_.Fullname) -replace '(?<=<title>).*?(?=</title>)',$_.Directory.Name | sc $_.Fullname -Force -Verbose -Encoding UTF8}"

Vielleicht könnte man das wie von mir gewünscht abändern? Also WAS ausgelesen werden soll (= der Titel der von mir zu erstellenden *.txt-Dateien in den Unterordnern und in welchem tag es eingetragen werden soll. (Land = USA.txt = <country>USA</country>. Dann könnte ich den Ziel-tag für jede gewünschte Rubrik einfach nach Belieben abändern.
 
Zuletzt bearbeitet:

rloxley

Grünschnabel
Ja, jede Doku liegt in einem Unterordner mit gleichem Namen wie die Doku selbst. In diesen Unterordnern liegen dann die Doku, die *.nfo, eine fanart.jpg und eine poster.jpg, alle mit exakt den gleichen Namen.
 

rloxley

Grünschnabel
HDD C:\
- Ordner "Dokus"
- Unterordner für jede einzelne Doku
- IN den Unterordnern, z.B. Unterordner "Doku1":
- Doku1.avi
- Doku1.nfo (xml)
- Doku1-poster.jpg
- Doku1-fanart.jpg

... UND die von mir dann jeweils kurz erstellte "USA.txt", oder "Thriller.txt", usw... die ich nach jedem Skriptdurchlauf dann natürlich wieder lösche, bevor ich mir die nächste Kategorie vornehme.

Der Aufbau ist GRUNDSÄTZLICH gleich. Nur der Speicherort (C:\, D:\ E:\, ... Z:\) ändert sich.
Auch die Basis-nfo-Datei ist immer die Gleiche, die mit den Infos zu füllen ist.

Ich möchte halt gerne jeden Unterordner kurz nach EINER Info (z.B. Land) durchsehen und wenn ich fertig bin, das Skript für ALLE Unterordner durchlaufen lassen können. Dann ist überall das Land eingetragen, ich kann die *txt-Dateien wirder löschen und beim nächsten mal alle Kategorien durchsehen, oder die Laufzeit, oder oder...
 
Zuletzt bearbeitet:

Technipion

Erfahrenes Mitglied
SO möchte ICH es machen. Einen Vorteil sehe ich in Deinen sicher gut gemeinten "Mach das mal anders"-Vorschlägen für mich und meine gewünschte Arbeitsweise nicht. Ich verstehe auch nicht, was Dein Grund ist, mich unbedingt von dem abzubringen...
Warum ich das auf keinen Fall so machen soll, wie ICH arbeiten möchte, erschliesst sich mir nicht.
Das Schlüsselwort hier lautet Erfahrung. Dein System ist heftig ineffizient und so ziemlich das Gegenteil von robust. Wenn sich z.B. an deinem Ordneraufbau, deinem Namensschema oder dem Aufbau der xml-Datei etwas ändert, guckst du in die Röhre. Womöglich zerschießt dir das Skript dann sogar die ganze Datenbank.

Ich sehe mir jede Doku kurz an, stelle fest, aus welchem Land sie stammt, und schreibe den Namen des Landes als Titel in eine neue Textdatei im gleichen Ordner.
Da du sowieso alles manuell machen musst: Wieso trägst du die Sachen nicht gleich selbst in die xml-Datei ein? :unsure:

Für die Verwaltung von Daten bietet es sich übrigens immer an, sämtliche Infos an einem zentralen Ort zu lagern, statt sie über dutzende Ordner zu verstreuen. Ein Tabellenkalkulationsprogramm bietet sich hier tatsächlich an. Und dort ließen sich auch einzelne Eigenschaften Stück für Stück eintragen.

Gruß Technipion
 

Sempervivum

Erfahrenes Mitglied
Ich habe mal dieses Powershell-Skript geschrieben:
Code:
$tagName = "country"
# Rekursiv alle Dateien mit der Endung .nfo ermitteln
$files = Get-ChildItem -Filter *.nfo -File -Recurse
ForEach ($file in $files) {
    # Verzeichnis extrahieren
    $folder = Split-Path -Path $file.FullName -Parent
    # Pruefen ob eine txt-Datei existiert
    $txtFile = Get-ChildItem -Path $folder -Filter *.txt -File
    if ($txtFile.Count -eq 1) {
        # Name der Datei ohne Endung ermitteln
        $name = $txtFile.BaseName
        # Inhalt der nfo-Datei lesen
        $xml = Get-Content -Path $file.FullName
        # Inhalt in Tag eintragen
        $xml = $xml -Replace "<$tagName>.*</$tagName>", "<$tagName>$name</$tagName>"
        Write-Host "Tag" $tagName "in" $file.FullName "auf" $name "gesetzt"
        # Geaendertes XML wieder in nfo-Datei eintragen
        Set-Content -Path $file.FullName -Value $xml
    }
    else {
        Write-Host "Keine txt-Datei in" $folder "gefunden"
    }
}
Read-Host -Prompt "Press Enter to exit"
Als z. B. edit-nfo.ps1 im Wurzelverzeichnis ablegen und mit Rechtsklick - "Mit Powershell ausführen" starten.
Unbedingt vorher eine Sicherunskopie anlegen, falls etwas nicht wie gewünscht funktioniert!
Setzt voraus, dass das Tag schon in der nfo-Datei existiert. Wenn das nicht der Fall ist, kann man es leicht erweitern, so dass es ggf. eingefügt wird.

Verbesserungsvorschlag von mir: Tagnamen in den Dateinamen der txt-Datei übernehmen, dann kannst du gleich mehrere Tags erfassen:
country-USA.txt
genre-Folk.txt
userrating-5.txt
Allerdings müsste man dazu das Skript ein wenig erweitern.
 

rloxley

Grünschnabel
Erst einmal vielen herzlichen Dank an Euch alle :)

Zum vielleicht besseren Verständnis: Ich lege hiermit keine Datenbank an, sondern mache nur die "Vorarbeit" dafür, fülle nfo/xml-Dateien mit Informationen, die anschliessend automatisch vom Programm (Kodi) ausgelesen und in dessen Datenbank eingetragen werden.

ALLES, was ich hier mache, ist "nur" temporär und einmalig, bis die xml-Dateien mit den entsprechenden Info's gefüllt sind. Es geht hier also "nur" um die Art und Weise, wie ich die jeweiligen Informationen schnell und effektiv in die entsprechenden tags der xml-Dateien bekomme. NUR DIESE werden später vom Programm genutzt, ALLES andere für diese "Vorarbeit" wird in den Ordnern anschliessend wieder gelöscht.

Meine Vorstellung war, dass ein Skript mir eine "Massenverarbeitung" ermöglicht, bei der ich nicht jede einzelne nfo/xml-Datei in jedem Unterordner von Hand öffnen muss, im notepad++, das ich dafür nutze, immer wieder erst Kodierung (Stichwort Umlaute) und Skriptspache einstellen muss, um die Info dann von Hand eintragen zu müssen...

Es lässt sich sicher darüber "streiten", WIE man das jetzt am Besten angeht und ich als Unerfahrenster unter uns höre mir natürlich gerne jeden Verbesserungsvorschlag an. Zumal ich Euch ja um Hilfe bitte. :)

FÜR MICH war die Vorstellung: "Schneller Rechtsklick im Unterordner, neue Textdatei, 'USA.txt', weiter" halt am einfachsten. Bei einer MÖGLICHEN zu erstellenden Excel-Tabelle sehe ich deutlich mehr "Arbeit" - und AUCH keinen Vorteil zu "dann trag's doch gleich von Hand in die XML-Datei ein"... korrigiert mich bitte, wenn ich falsch liege. Zumal ich mich mit Excel gar nicht auskenne, wie ich oben schon schrieb.

Man kann ein Skipt (falls machbar) doch auf alle erdenklichen EIGENEN Wünschen zuschneiden. Salopp aber nicht respektlos gesagt,: Egal, wie andere Profis das finden. DAS war meine Bitte.

"Ihr" mögt meine Idee plump finden, ich halte Eure Vorschläge für MEIN Anliegen spontan für weit übers Ziel hinaus, gar nicht notwendig und deutlich arbeitsaufwändiger. Auch hier: Korrigiert mich bitte, wenn ich falsch liege.

@Sempervivum zeigt doch erstklassig, dass es möglich ist. Er hinterfragt mit keiner Silbe mein Vorhaben, sondern nur: "Was willste machen? SO könnte das gehen..."-> Besser geht's nun wirklich nicht :) DAZU sogar noch ein echter Verbesserungsvorschlag, der mir RICHTIG GUT gefällt und den ich sehr gerne übernehmen würde/möchte! Ein herzliches Dankeschön an Dich dafür :) Wenn das AUCH NOCH ginge, wäre ich NOCH glücklicher als ich mir vorher vorstellte... :)

Ich werde Dein Skript jetzt mal ausprobieren und dann berichten :)

Nochmals dankeschön an Euch ALLE: und ganz besonders an @Sempervivum :)

Viele Grüße
 

Neue Beiträge