WinFuture-Forum.de: Proggi um Werte in Textdateien automatisch umzustellen - WinFuture-Forum.de

Zum Inhalt wechseln

Windows 10: Alle News, der Download sowie zahlreiche Screenshots und Videos zum neuen Betriebssystem von Microsoft. Jetzt im WinFuture Windows 10 - Special informieren!
Seite 1 von 1

Proggi um Werte in Textdateien automatisch umzustellen


#1 Mitglied ist offline   daghaedd 

  • Gruppe: aktive Mitglieder
  • Beiträge: 295
  • Beigetreten: 09. Mai 09
  • Reputation: 2

geschrieben 14. September 2016 - 18:55

Hallo,
meine Musiksammlung, inzwischen 60 GB groß, habe ich auf einen NAS Server gelegt. Allerdings findet der Mediaplayer nun keine einzige Wiedergabeliste mehr, weil in den WDL Dateien jetzt ein falscher Zugriffsparameter steht.
Der Wert E:\musik müsste in Z:\musik in den WDL Dateien geändert werden. Die WDL Dateien sind reine Textdateien.
Da ich inzwischen auch über 100 Wiedergabelisten habe, wäre das eine Knechtsarbeit, die alle händisch umzustellen.
Deshalb frage ich hier mal, ob es ein kleines Progrämmchen gibt, wo ich per Batch-Einstellung alle Werte in den WDL Dateien ändern kann.
Dass würde natürlich mit einem Script gehen, aber von Scripts habe ich keine Ahnung.
Kann mir jemand weiterhelfen?
Gruß,
Dag
0

Anzeige



#2 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 14. September 2016 - 19:37

klingt nach nem Job für GNU sed (stream editor)

sed -i 's/E:\\m/Z:\\M/' datei


Erklärung:
suche nach "E:\m" (doppelter Backslash ist kein Tippfehler!)
ersetze gefundenes durch "Z:\M"
'datei' bezeichnet die Dateien die bearbeitet werden, hier können auch mehrere DAteien nacheinander angegeben werden
'-i' sorgt dafür, dass die Dateien geändert werden anstatt das Ergebnis auf den Bildschirm zu werfen.
eventuell noch ein g hinter den letzten Slash, wenn der Suchbegriff mehrmals pro Zeile vorkommt.

sed findest du in jeder xbeliebigen Linuxdistribution oder hier für Windows.
Für die Windowsversion aber keine Garantie, ob die genauso tickt, hab ich noch nie in der Hand gehabt.

In jedem Fall solltest du vor der Bearbeitung mit sed einen durchlauf ohne den Schalter -i durchführen und das Ergebnis prüfen.

Dieser Beitrag wurde von Sturmovik bearbeitet: 14. September 2016 - 19:39

«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
0

#3 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.803
  • Beigetreten: 20. Juli 07
  • Reputation: 1.121
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 15. September 2016 - 07:11

Tickt genauso, ja. Ist ja auch (mehr oder weniger) derselbe Quellcode. :)

Alternative wäre noch via Texteditor - beispielsweise Notepad++. Den aufmachen, sämtliche zu bearbeitenden Dateien reinladen (gibt offensichtlich viele viele Tabs) und dann über Suchen+Ersetzen die Pfade anpassen. Dann "In allen geöffneten Dateien" ankreuzen.

Haken daran: Frißt Ressourcen und dauert daher. Pro ist - wenn man das so sehen will -- daß es halt mit graphischer Schnittstelle ist.

Via sed(1) wäre definitiv die bessere Wahl, entweder per Sturmovik's verlinkter Gnu32 Variante oder - imo die bessere, weil aktuellere Option -- via msys2.

Ansonsten so wie Sturmovik ja schon schrieb. Ergänzend vielleicht noch, daß das "datei" oben im Beispiel durchaus auch ein *.* sein kann.

Hinweis. FALLS das Z: eine Referenz auf den gemappten Laufwerksbuchstaben des NAS sein sollte: Bring in Erfahrung (probier aus) ob es mit dem UNC-Pfad (\\<nasname>\<freigabename>) auch funktioniert. Der funktioniert dann nämlich überall. Netzlaufwerksbuchstaben sind nicht immer, nicht überall und auch nicht in jedem Kontext verfügbar, da benutzerspezifisch.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#4 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 4.744
  • Beigetreten: 11. September 10
  • Reputation: 424
  • Geschlecht:Männlich

geschrieben 15. September 2016 - 14:03

Ääähm, und falls da nicht mehr von den Buchstaben abhängt, einfach ändern? Also »E« ist ja bestimmt eine Festplatte oder Partition auf dem Rechner. Man könnte dieser einen anderen Buchstaben geben und gibt dem NAS dann das nun freie »E« und fertig.


Aber wie gesagt, nur wenn da nicht allzuviel von abhängig ist. Wenn da noch allerhand andere Ordner und Dateien auf den betroffenen Laufwerken mit irgendwelchen Sachen kreuz und quer verknüpft sind, natürlich nicht.

Dieser Beitrag wurde von Holger_N bearbeitet: 15. September 2016 - 14:06

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#5 Mitglied ist offline   daghaedd 

  • Gruppe: aktive Mitglieder
  • Beiträge: 295
  • Beigetreten: 09. Mai 09
  • Reputation: 2

geschrieben 15. September 2016 - 20:35

Hallo,
schon mal vielen Dank. Habe sed schon mal installiert.
um ohne Parameter -i zunächst zum testen, sähe dann so aus?

sed 's/E:\\m/Z:\\M/' *.wdl

Wenn alles klappt dann:

sed -i 's/E:\\m/Z:\\M/' *.wdl

Richtig so?

Das mit dem Sed ist eine feine Sache, Dank an Sturmovik. Ich habe bei Amazon eine unbegrenzte Cloud eingerichtet. Mit dem Programm webdrive kann ich Webdav und damit LW-Buchstaben verwenden. Wäre toll, wenn ich dann gleich auf die Cloud zugreifen kann.
Diese Nacht werde ich die mal die 60 GB Musik in die Cloud kopieren.
Werde berichten, wenn es klappt.

Gruß,
Dag
0

#6 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 15. September 2016 - 20:58

Jop, so isses richtig :)
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
0

#7 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.803
  • Beigetreten: 20. Juli 07
  • Reputation: 1.121
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 16. September 2016 - 00:45

Sollte so passen, aber ich schlag ein

sed -i -e 's/E:\\m/Z:\\M/ig' *.wdl

vor. Damit wird sichergestellt, daß case-insensitive gesucht wird (i) und nicht nach dem ersten Auftreten in der Zeile abgebrochen wird (g). Sonst ist z:\Musik nicht dasselbe wie Z:\musik oder sonstwelche Variationen davon.

NB - wenn natürlich nur jeweils ein z:\ pro Zeile auftreten *kann*, kann man den (g)lobal-Modifier natürlich weglassen.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#8 Mitglied ist offline   membro 

  • Gruppe: aktive Mitglieder
  • Beiträge: 179
  • Beigetreten: 16. März 08
  • Reputation: 1

geschrieben 04. Dezember 2016 - 20:18

Hallo,
ich habe das gleiche Problem. Ein Sed 4.2.1 habe ich installiert. Weiß aber nicht wie es gestartet wird. Ich bin mit CMD - Admin in den Pfad der Wiedergabelisten gegangen und habe dann den Befehl wie oben angeführt eingegeben. Bekomme aber nur eine Fehlermeldung, dass SED nicht gefunden wird.
Kann mir jemand sagen, wie ich SED zum arbeiten bekomme?
Gruß,
membro
0

#9 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.803
  • Beigetreten: 20. Juli 07
  • Reputation: 1.121
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 04. Dezember 2016 - 20:47

Sieht aus, als wäre die sed-Installation nicht in der Pfadvariablen registriert.

Du könntest:

- über Systemsteuerung|System (sysdm.cpl) > Erweitert > Umgebungsvariablen die Pfadvariable (PATH) Deines Benutzerkontos um den Pfad zu sed.exe erweitern (nur das Verzeichnis, nicht den Dateinamen selber; also zB C:\msys2\usr\bin). Dann gilt das für dieses Benutzerkonto generell überall;

- Dasselbe tun, aber nicht den Benutzerpfad, sondern den Systempfad ändern (unterer Bereich statt oberer Bereich bei den Umgebungsvariablen), damit das global für alle immer gilt;

- in der gestarteten Kommandozeile
SET PATH=%PATH%;<Pfad-zu-sed.exe>
eingeben, damit das für die jeweilige Kommandozeile gilt und nur dort - nach Beenden ist das dann weg;

- sed.exe mit vollständigem Pfad aufrufen, also zB C:\msys2\usr\bin\sed.exe. Das geht immer.

Wenn Du das nur ein, zwei mal brauchst, ist der letzte Weg der effizienteste; je häufiger das wird, insbesondere wenn das nicht nur in einer Sitzung gebraucht wird, desto eher wäre eine der beiden ersten Optionen die bessere Wahl. Die Pfadvariable von der Kommandozeile selber aus ändern macht nur Sinn, wenn Du diese einmal starten willst und dann sed mehr oder weniger oft brauchst und das nicht jedesmal mit vollständigem Pfad ausführen willst ("sed" sind schließlich nur drei Buchstaben).


Und ich seh grad, bei der Kommandozeile oben in den vorstehenden Posts fehlt augenscheinlich die -s-Option. S für separate, damit das Ergebnis in dieselben Dateien geschrieben wird und nicht als Ganzes zusammengefaßt wird.

Außerdem zum Testen das -i weglassen (inline). Dann bekommst Du das Ergebnis auf den Bildschirm. Mit -i werden die Dateien sofort und ohne Rückfrage überschrieben - schlecht, wenn das sed-Script nicht ganz gepaßt hat.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0