Teil aus Textfile auslesen und in neues Textfile speichern
Hallo liebes Forum,
ich bin auf der Suche nach einem kleinen Batch-Script für folgende Situation.
Ich lese via Script den Inhalt eines bestimmten FTP Verzeichnisses aus, und will aber ich brauche nicht den Inhalt der Subfolder.
Der Inhalt des Textfiles sieht wie folgt aus:
-rw-r----- 1 ftpxxxx ace 211495 Dec 2 07:21 049_pdf_20101201.zip
history:
total 80
-rw-r--r-- 1 ace ace 32636 Dec 1 15:45 049_1_i_20101201_759.txt
-rw-r--r-- 1 ace ace 4047 Dec 1 15:47 049_1_p_20101201_760.txt
-rw-r--r-- 1 ace ace 3061 Dec 1 15:19 DE1_CUST_20101201161904.XML
Ich möchte gerne alle Zeilen bis zur ersten Leerzeile auslesen und in ein neues TXT File schreiben.
Hat jemand zufällig eine IDee ?
Vielen Dank !
Gruß
Marcus
ich bin auf der Suche nach einem kleinen Batch-Script für folgende Situation.
Ich lese via Script den Inhalt eines bestimmten FTP Verzeichnisses aus, und will aber ich brauche nicht den Inhalt der Subfolder.
Der Inhalt des Textfiles sieht wie folgt aus:
-rw-r----- 1 ftpxxxx ace 211495 Dec 2 07:21 049_pdf_20101201.zip
history:
total 80
-rw-r--r-- 1 ace ace 32636 Dec 1 15:45 049_1_i_20101201_759.txt
-rw-r--r-- 1 ace ace 4047 Dec 1 15:47 049_1_p_20101201_760.txt
-rw-r--r-- 1 ace ace 3061 Dec 1 15:19 DE1_CUST_20101201161904.XML
Ich möchte gerne alle Zeilen bis zur ersten Leerzeile auslesen und in ein neues TXT File schreiben.
Hat jemand zufällig eine IDee ?
Vielen Dank !
Gruß
Marcus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 156199
Url: https://administrator.de/contentid/156199
Ausgedruckt am: 17.11.2024 um 09:11 Uhr
7 Kommentare
Neuester Kommentar
moin,
demo für den cmd Prompt:
"nur" macht er das haargenauso - wie du es beschrieben hast - auch aus total 80 wird 80
Falls das nicht so sein soll und total die Ausnahme wäre, wo die zeile mit t beginnt:
Im anderen Fall, dass nur Zeilen die "r w ace" haben - würde es so laufen:
Um testen alles hinter und incl. >> mal weglassen.
Alles weitere
Gruß
demo für den cmd Prompt:
for /f "tokens=2,*" %a in (laufwerk:\pfad\text.txt) do echo %a %b>>Laufwerk:\pfad\output.txt
- laufwerk:\pfad\ natürlich an deine Werte anpassen
- dito mit den .txt
"nur" macht er das haargenauso - wie du es beschrieben hast - auch aus total 80 wird 80
Falls das nicht so sein soll und total die Ausnahme wäre, wo die zeile mit t beginnt:
for /f "eol=t tokens=2,*" %a in (laufwerk:\pfad\text.txt) do echo %a %b>>Laufwerk:\pfad\output.txt
(jede Zeile, die mit t beginnt - wird ignoriert)Im anderen Fall, dass nur Zeilen die "r w ace" haben - würde es so laufen:
for /f "tokens=2,*" %a in ('"findstr "r w ace" "laufwerk:\pfad\text.txt"') do echo %a %b>>Laufwerk:\pfad\output.txt
Um testen alles hinter und incl. >> mal weglassen.
Alles weitere
for /?
in einer batch aus jedem einzelnen % ein doppeltes %% machen - sonst ist es so allein und auf einem Bein kann man nicht laufen
Gruß
Hallo Marcus,
der folgende Code sollte Dein Problem lösen.
FINDSTR sucht nach Zeilen, die ein Zeilenende (
Gruß
Friemler
der folgende Code sollte Dein Problem lösen.
@echo off
setlocal enabledelayedexpansion
set "OutputEnd=0"
type NUL>"Laufwerk:\pfad\output.txt"
for /f "tokens=1,* delims=:" %%k in ('findstr /n $ "laufwerk:\pfad\text.txt"') do (
if "%%l" equ "" set "OutputEnd=1"
if !OutputEnd! equ 0 echo %%l>>"Laufwerk:\pfad\output.txt"
)
endlocal
$
) enthalten (findet also alle Zeilen) und schreibt die Zeilennummern (wegen der Option /n
) mit einem nachfolgenden Doppelpunkt vor den Zeileninhalt. FOR behandelt diesen Doppelpunkt als Trennzeichen, in %%k
steht die Zeilennummer, in %%l
der Zeileninhalt. Wenn %%l
nichts enthält (Leerzeile gefunden), wird die Variable OutputEnd
auf 1 gesetzt und somit die Ausgabe der nachfolgenden Zeilen in Skript-Zeile 11 unterbunden.Gruß
Friemler
Moin marcushb,
zum Verarbeiten einer bestimmten (der ersten, der letzten, der 13ten..) Zeile einer Textdatei mit FOR/F-Anweisungen findest du einige Beispiele im Bereich Batch & Shell mit Hilfe der Suchfunktion.
Du kannst den ...DO..-Teil etwas aufbrezeln mit
Grüße
Biber
zum Verarbeiten einer bestimmten (der ersten, der letzten, der 13ten..) Zeile einer Textdatei mit FOR/F-Anweisungen findest du einige Beispiele im Bereich Batch & Shell mit Hilfe der Suchfunktion.
Du kannst den ...DO..-Teil etwas aufbrezeln mit
FOR /F ... %i in (..) DO if not defined x (echo %i>neueDatei.txt) & set "x=leberkäse"
Grüße
Biber
@Friemler
Anstelle der Zuweisung von "0" bzw "1" zur Variablen %OutputEnd% tendiere ich eher dazu, sie im "0"-Fall per
zu löschen, da sie so ohne "
Grüße
bastla
FINDSTR sucht nach Zeilen, die ein Zeilenende ($) enthalten (findet also alle Zeilen)
... mit ev der Ausnahme der letzen Zeile (falls diese eben nicht mit einem CR und/oder LF endet) - da aber alle Zeilen jedenfalls einen Anfang haben:for /f "tokens=1,* delims=:" %%k in ('findstr /n "^" "laufwerk:\pfad\text.txt"') do (
set "OutputEnd="
delayedExpansion
" einfach per "if defined OutputEnd
" abgefragt werden kann.Grüße
bastla
@bastla
[Edit]
Da schreibt man eine Antwort und schon hat der Kerl noch eine sinnvolle Verbesserung gefunden ! Ich meine die Sache mit dem Löschen von
Gruß
Friemler
... mit ev der Ausnahme der letzen Zeile (falls diese eben nicht mit einem CR und/oder LF endet)
Stimmt, Vorsicht ist die Mutter der Porzellankiste. In diesem Fall aber vernachlässigbar, da der TO ja sowieso nur bis zur ersten Leerzeile ausgeben will. Außerdem ist die Textdatei ein Verzeichnislisting, das von einem Skript generiert wurde. Man kann also erwarten, dass auch die letzte Zeile mit CR/LF endet.[Edit]
Da schreibt man eine Antwort und schon hat der Kerl noch eine sinnvolle Verbesserung gefunden ! Ich meine die Sache mit dem Löschen von
OutputEnd
, statt die Variable auf 0 zu setzen.Gruß
Friemler
@Friemler
Du erklärst so schön, was Dein Batch macht - da wollte ich auch einmal etwas (und dann noch ein weiteres Etwas ) beitragen ...
Grüße
bastla
Du erklärst so schön, was Dein Batch macht - da wollte ich auch einmal etwas (und dann noch ein weiteres Etwas ) beitragen ...
Grüße
bastla