Zeile 12 aus einer TXT-Datei auslesen und als Datei-Name für die TXT-Datei verwenden (für sämtliche TXT-Dateien in einem Verzeichnis!)
Hallo liebe Batch-Pros,
als Newbie stehe ich gerade vor der Aufgabe, dass ich in einem Verzeichnis mit Txt-Files (bzw. GPX-Files), welche einfach einen fortlaufenden Namen haben (1.txt, 2.txt,...) umd im Inhalt der Datei der eigentliche Namen der Datei steht, den Namen aus der Datei zu nehmen und die Datei umzubennen. Hört sich erstmal einfach an, aber ich bekomme es nicht gebacken
. Was ich jetzt schon den halben Tag versuche ist, dass ich eine Schleife über alle Dateien in dem Verzeichnis zu machen (was auch geklappt hat (for %%f in ("*.gpx") do ( echo %%~f) --> alle Dateien werden aufgelistet), aber es scheitert dann daran die Stelle mit dem eigentlichen Dateinamen in der jeweiligen Datei auszulesen (und dann folgend diese Datei umzubenennen (quasi von 1.txt zu "Reise an die Ostsee.txt"). Da die Txt-Datei ein GPX-File ist gibt es hier auch eine "Struktur" (XML?!), jedoch bin ich hier gleich gnadelos gescheitert weshalb meine Idee bzw. Versuch gewesen ist, dass ich einfach immer die 12 Zeile auslese, da hier der Tag "<name>Reise an die Ostsee</name>" steht und ich dann vorne und hinten den Tag name einfach abschneide.
Aber wie schon gesagt, ich bin daran gescheitert in jede Datei in diesem Verzeichnis auf die Zeile 12 zuzugreifen --> Nachdem ich hier jetzt bei meiner Recherche auf einige Post von diesem Form gestoßen bin, aber ich damit nie ans Ziel gekommen bin stelle ich hier eine neu Frage :o ==> Ideen oder Vorschläge, wie ich das Problem lösen kann?
Umgebung: Windows 10
Auszug/Bsp aus der TXT-/GPX-File
als Newbie stehe ich gerade vor der Aufgabe, dass ich in einem Verzeichnis mit Txt-Files (bzw. GPX-Files), welche einfach einen fortlaufenden Namen haben (1.txt, 2.txt,...) umd im Inhalt der Datei der eigentliche Namen der Datei steht, den Namen aus der Datei zu nehmen und die Datei umzubennen. Hört sich erstmal einfach an, aber ich bekomme es nicht gebacken
Aber wie schon gesagt, ich bin daran gescheitert in jede Datei in diesem Verzeichnis auf die Zeile 12 zuzugreifen --> Nachdem ich hier jetzt bei meiner Recherche auf einige Post von diesem Form gestoßen bin, aber ich damit nie ans Ziel gekommen bin stelle ich hier eine neu Frage :o ==> Ideen oder Vorschläge, wie ich das Problem lösen kann?
Umgebung: Windows 10
Auszug/Bsp aus der TXT-/GPX-File
<?xml version="1.0" encoding="utf-8"?><gpx creator="routenplaner Desktop App" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.routenplaner.com/xmlschemas/WaypointExtension/v1 http://www8.routenplaner.com/xmlschemas/WaypointExtensionv1.xsd http://www.routenplaner.com/xmlschemas/TrackPointExtension/v1 http://www.routenplaner.com/xmlschemas/TrackPointExtensionv1.xsd http://www.routenplaner.com/xmlschemas/GpxExtensions/v3 http://www8.routenplaner.com/xmlschemas/GpxExtensionsv3.xsd http://www.routenplaner.com/xmlschemas/ActivityExtension/v1 http://www8.routenplaner.com/xmlschemas/ActivityExtensionv1.xsd http://www.routenplaner.com/xmlschemas/AdventuresExtensions/v1 http://www8.routenplaner.com/xmlschemas/AdventuresExtensionv1.xsd http://www.routenplaner.com/xmlschemas/PressureExtension/v1 http://www.routenplaner.com/xmlschemas/PressureExtensionv1.xsd http://www.routenplaner.com/xmlschemas/TripExtensions/v1 http://www.routenplaner.com/xmlschemas/TripExtensionsv1.xsd http://www.routenplaner.com/xmlschemas/TripMetaDataExtensions/v1 http://www.routenplaner.com/xmlschemas/TripMetaDataExtensionsv1.xsd http://www.routenplaner.com/xmlschemas/ViaPointTransportationModeExtensions/v1 http://www.routenplaner.com/xmlschemas/ViaPointTransportationModeExtensionsv1.xsd http://www.routenplaner.com/xmlschemas/CreationTimeExtension/v1 http://www.routenplaner.com/xmlschemas/CreationTimeExtensionsv1.xsd http://www.routenplaner.com/xmlschemas/AccelerationExtension/v1 http://www.routenplaner.com/xmlschemas/AccelerationExtensionv1.xsd http://www.routenplaner.com/xmlschemas/PowerExtension/v1 http://www.routenplaner.com/xmlschemas/PowerExtensionv1.xsd http://www.routenplaner.com/xmlschemas/VideoExtension/v1 http://www.routenplaner.com/xmlschemas/VideoExtensionv1.xsd" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wptx1="http://www.routenplaner.com/xmlschemas/WaypointExtension/v1" xmlns:gpxtrx="http://www.routenplaner.com/xmlschemas/GpxExtensions/v3" xmlns:gpxtpx="http://www.routenplaner.com/xmlschemas/TrackPointExtension/v1" xmlns:gpxx="http://www.routenplaner.com/xmlschemas/GpxExtensions/v3" xmlns:trp="http://www.routenplaner.com/xmlschemas/TripExtensions/v1" xmlns:adv="http://www.routenplaner.com/xmlschemas/AdventuresExtensions/v1" xmlns:prs="http://www.routenplaner.com/xmlschemas/PressureExtension/v1" xmlns:tmd="http://www.routenplaner.com/xmlschemas/TripMetaDataExtensions/v1" xmlns:vptm="http://www.routenplaner.com/xmlschemas/ViaPointTransportationModeExtensions/v1" xmlns:ctx="http://www.routenplaner.com/xmlschemas/CreationTimeExtension/v1" xmlns:gpxacc="http://www.routenplaner.com/xmlschemas/AccelerationExtension/v1" xmlns:gpxpx="http://www.routenplaner.com/xmlschemas/PowerExtension/v1" xmlns:vidx1="http://www.routenplaner.com/xmlschemas/VideoExtension/v1">
<metadata>
<link href="http://www.routenplaner.com">
<text>routenplaner International</text>
</link>
<time>2017-08-22T20:25:18Z</time>
<bounds maxlat="3232.551193976774812" maxlon="13.22682297155261" minlat="23.898009908" minlon="33.432455975562334" />
</metadata>
<trk>
<name>Reise an die Ostsee</name>
<extensions>
<gpxx:TrackExtension>
<gpxx:DisplayColor>Blau</gpxx:DisplayColor>
</gpxx:TrackExtension>
</extensions>
<trkseg>
<trkpt lat="46.898988989" lon="18.707790011540055">
<ele>570</ele>
</trkpt>
<trkpt lat="66.551185008138418" lon="17.707915991544724">
...
...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 384360
Url: https://administrator.de/forum/zeile-12-aus-einer-txt-datei-auslesen-und-als-datei-name-fuer-die-txt-datei-verwenden-fuer-saemtliche-txt-384360.html
Ausgedruckt am: 07.04.2025 um 08:04 Uhr
15 Kommentare
Neuester Kommentar
Servus @MrBratwurst ,
Grüße Uwe
GPX-File ist gibt es hier auch eine "Struktur" (XML?!)
Richtig, das ist eine XML konformes Textdatei und die sollte man auch so behandeln, also korrekterweise mit einem Parser den Wert extrahieren, eine "Zeilennummer" bringt dich da um Gottes Willen nicht weiter, also mach es gleich so:@echo off
set "folder=D:\Reisetracks"
powershell -Command "gci '%folder%' -Filter *.gpx | rename-item -NewName {\"$(([xml](gc $_.Fullname)).gpx.trk.name)$($_.Extension)\"} -Force -verbose"
dabei wird ein Fehler geworfen. Ich vermute, dass es hier ein Zugriffsproblem gibt, da zum einen der Name aus der Datei geholt wird und zugleich der Dateiname geändert werden soll.
Nein! Das sind separate Vorgänge da das Get-Content (gc) in Klammern steht.Das Argument kann nicht an den Parameter "Path" gebunden werden, da es NULL ist.
Das geht so nicht, du brauchst die Kopier-Quelle nicht setzen die wird schon automatisch in der Pipe übernommen! Wenn nicht alle deine Dateien den Namen in der XML gesetzt haben kommt es natürlich zum Fehler weil der Zielname dann leer ist. Das kannst du aber abfangen mit einem Where-Object.Hier die Variante mit Copy statt rename.
@echo off
set "folder=D:\Reisetracks"
powershell -Command "gci '%folder%' -Filter *.gpx | ?{([xml](gc $_.Fullname)).gpx.trk.name -ne $null} | copy-item -Destination {\"%folder%\$(([xml](gc $_.Fullname)).gpx.trk.name)$($_.Extension)\"} -Force -verbose"
Muss noch ein String-Checker einbauen, da die Namen der Touren teilweise unerlaubte Zeichen für einen Dateinamen haben
Klar, so eine Funktion habe ich auch auf Lager:function Replace-IllegalFilenameChars([parameter(ValueFromPipeline=$true)]$string,$replaceString='_'){
return ($string -replace"^(com[1-9]|lpt[1-9]|con|nul|prn|aux)$|[$(([System.IO.Path]::GetInvalidFileNameChars() | %{"\x"+([byte][char]$_).toString('X').PadLeft(2,"0")}) -join '')]",$replaceString)
}
@colinardo
Ich hab noch ein paar Tests mit deiner Funktion gemacht, Uwe. [1-9] deckt die 0 nicht mit ab, die aber lustigerweise auch zu einem invaliden Name führt. Und wenn du den invaliden Namen eine Dateiendung anhängst, bleiben sie invalid. Selbst so etwas wie
Vorschlag:
Grüße
Steffen
Ich hab noch ein paar Tests mit deiner Funktion gemacht, Uwe. [1-9] deckt die 0 nicht mit ab, die aber lustigerweise auch zu einem invaliden Name führt. Und wenn du den invaliden Namen eine Dateiendung anhängst, bleiben sie invalid. Selbst so etwas wie
com0.xyz.txt
führt zum Fehler.Vorschlag:
function Replace-IllegalFilenameChars([parameter(ValueFromPipeline=$true)]$string,$replaceString='_'){
return ($string -replace"^(com\d|lpt\d|con|nul|prn|aux|con(in|out)\x24)(?=$|\.)|[$(([System.IO.Path]::GetInvalidFileNameChars() | %{"\x"+([byte][char]$_).toString('X').PadLeft(2,"0")}) -join '')]",$replaceString)
}
Grüße
Steffen
Lassen sich hier zwar problemlos erstellen, genauso wie "com0.txt", warum auch immer (Microsoftsche Nachvollziehbarkeit) ...
Naja alles weitere darfst du dir gerne erweitern, war eh noch eine simple "alte" Funktion ohne Anspruch auf Vollständigkeit, denn es gibt noch ein paar weitere Spezialfälle.
Naja alles weitere darfst du dir gerne erweitern, war eh noch eine simple "alte" Funktion ohne Anspruch auf Vollständigkeit, denn es gibt noch ein paar weitere Spezialfälle.
Nicht dass du denkst ich spinne (Win10)
Beide Male versucht eine Datei "test" umzubenennen. Funktioniert aber ebenso wenig, sie per Script erstellen zu wollen. Interessant ist dass sich Umleitungen zu conout$ im cmd Prompt ohne weiteres so verhalten wie der Ausgabestream.
Steffen
Beide Male versucht eine Datei "test" umzubenennen. Funktioniert aber ebenso wenig, sie per Script erstellen zu wollen. Interessant ist dass sich Umleitungen zu conout$ im cmd Prompt ohne weiteres so verhalten wie der Ausgabestream.
Steffen
Nicht wahr
.
Zum Thema weitere Sachen die nicht gehen, probier mal die Exponenten:
oder
bzw.
bzw.
Zahl oder Zahl das ist hier die Frage
. Aus Sicht eines Mathematikers JA, aus ASCII Sicht NEIN.
Zum Thema weitere Sachen die nicht gehen, probier mal die Exponenten:
com².txt
oder
com³.txt
bzw.
com²
bzw.
com³
Zahl oder Zahl das ist hier die Frage
Nur um noch Feedback zu geben
Hab ich gemacht. Auf 3 Maschinen, Win7 und Win10. Ich habe keine Ahnung wie du es geschafft hast, Uwe. Ich hab jedenfalls keine Möglichkeit gefunden Dateien namens conin$ oder conout$ zu erstellen. Weder im Explorer, noch per VBScript oder Powershell.
Steffen
Hab ich gemacht. Auf 3 Maschinen, Win7 und Win10. Ich habe keine Ahnung wie du es geschafft hast, Uwe. Ich hab jedenfalls keine Möglichkeit gefunden Dateien namens conin$ oder conout$ zu erstellen. Weder im Explorer, noch per VBScript oder Powershell.
Steffen