godzilla13
Goto Top

Daten via findstr ein eine neue Datei schreiben

Hallo zusammen,

vielleicht könnt ihr mir bei einem Batch in Verbindung mit findstr helfen. Ich habe schon ein wenig die anderen Beiträge studiert, finde aber nichts was 100% passt und bekomme es selber mit meinem Wissensstand auch nicht hin.

Ich habe eine Textdatei die wie folgt aufgebaut ist:
PFAD\GENERATOR>copy PFAD\Textnr_00\010000-00_00_00.xml  MODULE\010000-00_00_00.xml 
Das System kann die angegebene Datei nicht finden.

PFAD\GENERATOR>copy PFAD\Textnr_81\018189-00_00_01.xml  MODULE\018189-00_00_01.xml 
        1 Datei(en) kopiert.

PFAD\GENERATOR>copy PFAD\Textnr_73\017322-02_01_01.xml  MODULE\017322-02_01_01.xml 
        1 Datei(en) kopiert.

PFAD\GENERATOR>copy PFAD\Textnr_73\017337-00_01_02.xml  MODULE\017337-00_01_02.xml 
        1 Datei(en) kopiert.
usw.
Diese Liste sollte so modifiziert werden das am Ende eine neue Liste mit den einzelnen Kapiteln heraus kommt, jeweils mit einer Leerzeile als Abstand zwischen den Einträgen.
010000-00_00_00.xml

018189-00_00_01.xml

017322-02_01_01.xml

017337-00_01_02.xml

Gerne kann mit findstr dafür eine gesonderte Textdatei erstellt werden.

Optional wären noch folgende Dinge super:

  • Das .xml kann noch entfernt werden, sodass nur die reinen Kapitelnamen erscheinen.
  • Als Dateiname den Dateinamen einer anderen Datei heranziehen welche unter PFAD\KAPITELLISTE\ als *.xml Datei zu finden ist. In dem Pfad liegt immer nur eine Datei. Bsp.: Datei 18106-01-01.xml bewirkt den Dateinamen 18106-01-01.txt
  • Angabemöglichkeit eines Ausgabepfads für die zu generierende neue Textdatei mit dem gewünschten Inhalt.

Danke schonmals! Schöne Grüße,
Godzilla13

Content-Key: 154413

Url: https://administrator.de/contentid/154413

Printed on: May 5, 2024 at 04:05 o'clock

Member: bastla
bastla Nov 05, 2010 at 09:12:29 (UTC)
Goto Top
Hallo Godzilla13!

Hinsichlich der Pfadangaben wie zB
PFAD\Textnr_00\010000-00_00_00.xml
wäre noch eine genauere Beschreibung sinnvoll - insbesondere, ob Leerzeichen vorkommen können.

Auf Basis der angegebenen Beispiele wäre die Minimalvariante (zum Testen direkt in der CMD-Shell)
for /f "tokens=3" %i in ('findstr /i "\.xml" "D:\Die Textdatei.txt"') do @for /f "delims=" %a in ("%i") do @(echo %~na & echo\)>>con
Die Ausgabe erfolgt so nur auf dem Bildschirm - zum Testen mit einer Datei als Ziel einfach "con" durch einen Pfad ersetzen ...
Als Dateiname den Dateinamen einer anderen Datei heranziehen
Dateiname wofür?

Grüße
bastla

[Edit] Fehlenden Teil der Zeile nachgereicht [/Edit]
Member: Godzilla13
Godzilla13 Nov 05, 2010 at 09:32:45 (UTC)
Goto Top
Hi bastla,

Hinsichlich der Pfadangaben wie zB
wäre noch eine genauere Beschreibung sinnvoll - insbesondere, ob Leerzeichen vorkommen können.

Hier ein Beispiel für den kompletten Pfad:
S:\Generierung\Buchgenerierung\GENERATOR>copy S:\Daten\DATEN_XML\BAL\Sprache_01\Textnr_81\018189-00_00_01.xml  MODULE\018189-00_00_01.xml 
        1 Datei(en) kopiert.

Die Ausgabe erfolgt so nur auf dem Bildschirm - zum Testen mit einer Datei als Ziel einfach "con" durch einen Pfad
ersetzen ...
Bei der Testzeile werden mir in der ausgegebenen Textdatei nur Zeilen mit dem Text "%~na " angezeigt.

> Als Dateiname den Dateinamen einer anderen Datei heranziehen
Dateiname wofür?
Datainame für die auszugebene Datei. Dessen Namen sich je nach Kapitelliste natürlich ändert. Wäre nur eine weitere Erleichterung, Alterantiv benenne ich die Datei eben nach dem Batch per Hand kurz um.
Member: bastla
bastla Nov 05, 2010 at 12:06:44 (UTC)
Goto Top
Hallo Godzilla13!

Sorry - da war ein nicht ganz unwichtiger Teil der Zeile beim Posten auf der Strecke geblieben - ist jetzt aber oben schon ergänzt ...
Hinsichtlich der "Dateinamen" bin ich offensichtlich etwas begriffstutzig: Wenn nur eine Liste (mit Kapiteln) erzeugt wird, wozu dann mehrere Dateinamen?
Noch eine Klarstellung zu den Pfaden: Diese enthalten demnach keine Leerzeichen?

Grüße
bastla
Member: Godzilla13
Godzilla13 Nov 05, 2010 at 13:31:06 (UTC)
Goto Top
Nun funktioniert deine Zeile wunderbar. Schonmal vielen Dank dafür!

Zum Dateinamen, vielleicht verstehen wir uns falsch. Die Liste der Kapitel soll archiviert werden und den selben Namen haben wie die XML Datei, welche quasi die Quell-Textdatei generiert, aus der du ja oben die gewünschte neue Textdatei generierst.

Vielleicht ist das ganz umzusetzen auch viel zu umständlich, dann belassen wir es dabei. Mir ist mit dem Code oben schon sehr geholfen.

Und ja, der Pfad enthält keine Leerzeichen.

Edit: Ich habe gerade versucht die Zeile in eine .BAT Datei zu schreiben, da meldet er beim ausführen aber folgendes:
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters
ist ungültig: %~na & echo\)>>con
Member: bastla
bastla Nov 05, 2010 at 15:18:13 (UTC)
Goto Top
Hallo Godzilla13!

In Batch sind alle Laufvariablen von "for"-Schleifen (hier also %i und %a) mit doppelten AnführungsProzentzeichen zu schreiben - zB wäre das für die zitierte Stelle dann
echo %%~na & echo\)>>con
Zu den Dateinamen: Die einzelnen Bestandteile kannst Du so erhalten (wieder für die Konsole mit nur einem Prozentzeichen):
for /f "tokens=3" %i in ('findstr /i "\.xml" "D:\Die Textdatei.txt"') do @for /f "delims=" %a in ("%i") do @(echo Pfad: %~dpa & echo Name: %~na & echo Typ: %~xa & echo Name + Typ: %~nxa)>>con
Details dazu mit "for /?" (ziemlich am Ende) ...

Grüße
bastla

[Edit] "%" werden jetzt auch so genannt [/Edit]
Member: Godzilla13
Godzilla13 Nov 08, 2010 at 07:01:50 (UTC)
Goto Top
Kannst du mir das mit den Anführungszeichen nochmals hier posten? Ich bekomms gerade nicht hin und oben hast du keine Anführungszeichen drin nur noch ein zusätzliches %.
Das Problem mit dem Dateinamen verstehen wir uns immer noch falsch, aber lösen wir erstmal das Batch Datei Problem face-smile.


[Edit]Problem erkannt und gelöst[/Edit]

Dann zum Dateinamen: Der Dateinamen soll nicht aus dem Inhalt der Textdatei generiert werden. Im Pfad XY (Der Pfad unterscheidet sich vom Pfad der Quelltextdatei, zusätzliche Pfadangabe als notwendig)liegt eine .xml Datei. Das Batch müsste lediglich nachschauen wie diese Datei heißt und genau so die .TXT Datei benennen welche das Batch generiert.
Member: Godzilla13
Godzilla13 Nov 08, 2010 at 08:42:33 (UTC)
Goto Top
So ich habe das mit dem Dateinamen nun mit einer weiteren "for" Zeile hinbekommen.

Vielen Dank für deine Hilfe mit dem Batch.