heinze
Goto Top

2 Zeilen auf txt-file zusammenzügen mittels FOR -f und IF

Windows 10 Prof / CMD

Hallo Leute

mittlerweile habe ich wieder einige Stunden mit suchen und lesen und testen verbracht, nun steh ich wied eraufm Schlauch.

Ich möchte aus einem txt-File immer 2 Zeilen zusammen fassen.

Auszug aus dem txt-File "Muster.txt"

Berger Franz 85555
Zeile21
Huber Kurt 84441
Zeile22
Karl Franz Musterstatt 89999
Zeile23
Georg Maria Oberprumpftel Hamburg 98888
Zeile24


das Ergebniss sollte sein:

Berger Franz - Zeile21
Huber Kurt - Zeile22
.
.

Folgenden Code hab ich mir zurechtgebastelt, nur tut er alles nur nicht funktionieren.
Mittlerweile finde ich vor lauter rumprobieren nichts mehr.

@echo off
setlocal EnableDelayedExpansion

set Liste=D:\muster.txt
set Ziel=D:\musterneu.txt
set name=NIX
set name2=2malnix
set zaehler=1
set ausgabe=auchnix

for /f "usebackq tokens=* delims=;" %%i in (%Liste%) do (  
		
	set name=%%i
	set name=!name:~0,-6!
	set name2=%%i
	echo !zaehler!
	if !zaehler!==1 (
			echo !name! set zaehler=2
		) else (
			echo !name2! set zaehler=1
		)
)
	REM: hier sollte dann der ausgabestring  zusammengebaut werden und in das File: D:\musterneu.txt geschrieben werden

REM: hier sollte dann der ausgabestring  zusammengebaut werden und in das File: D:\musterneu.txt geschrieben werden

REM call %Ziel%


Irgendwo im IF-Teil liegt der Hund begraben.
ich habe schon die Anweisungen zw. den () in "" und ' gesetzt mit && verknüpft und und aber es werden die Set=zaehleranweisuge nicht umgesetz

aktulle Ausgabe die ich erhalte:

1
Berger Franz set zaehler=2
1
Z set zaehler=2
1
Huber Kurt set zaehler=2
1
Z set zaehler=2
1


Wer kann mir helfen und auch gleich erklären wiesowoweshalbwarum der Fehler war - in der Logik im Code oder wasweisichwo.
PS-Scripte helfen mir leide rnicht weiter da ich die ja noch viel weniger verstehe und ich mich mit PS auch nicht mehr beschäftigen will.

Herzlichen Dank im voraus für Eure Hilfe

Gruss Heinze

Content-Key: 570972

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

Printed on: May 6, 2024 at 23:05 o'clock

Mitglied: 144260
144260 May 10, 2020, updated at May 11, 2020 at 07:31:57 (UTC)
Goto Top
@echo off &setlocal EnableDelayedExpansion
:: Eingabedatei
set "liste=D:\muster.txt"  
:: Ausgabedatei
set "ziel=D:\musterneu.txt"  
:: Positionsindikator
set "blockstart=1"  
>"%ziel%" (for /f "usebackq delims=" %%a in ("%liste%") do (  
        REM Zeile variablen zuweisen
	set "line=%%a"  
        REM wenn Positionsindikator = 1 dann
	if "!blockstart!" == "1" (  
                REM passe Zeile an
		set "newline=!line:~0,-6! - "  
                REM setze Positionsindikator auf 0 
		set blockstart=0
	) else (
                REM gebe Variable mit ergänzender Zeile 2 aus
		echo.!newline!%%a
                REM setze Ausgabevariable zurück 
 		set "newline="  
	        REM für nächsten Druchlauf Positionsindikator auf 1 setzen
             	set "blockstart=1"  
	)
))
Member: ricardobohner
ricardobohner May 10, 2020 at 21:00:13 (UTC)
Goto Top
Hab den code von Killpid ausprobiert und scheint zu funktionieren.
Member: Heinze
Heinze May 11, 2020 at 07:27:53 (UTC)
Goto Top
Hallo ricardobohner

ja der code funktioniert.
Nur habe ich jetzt mehr Fragen wie Antworten..face-smile

LG Heinze
Member: Heinze
Heinze May 11, 2020 at 07:28:56 (UTC)
Goto Top
Hallo Killpid

danke herzlichst für die Lösung, klappt wunderbar.

Wenn ich mir das so durchschaue finde ich leider mehr Fragen für mich als wie " ahh so geht das - da war mein Fehler!"

Die Lösung mit : >"%ziel%" (for /f "usebackq delims=" %%a in ("%liste%") do ... ist mir komplett neu.. .
Kannsst du mir das mal erklären bitte, ich will ja auch noch was lernen und was verstehen von der Lösung.

Manchmal setzt du dieverschiedenen Anweisung zB. set "blockstart=1" in "" machmal nicht - wieso so?
Nun hab ich ein lauffähiges Script aber immer noch keinen Durchblick

Irgendwie ist mein Wissen komplett eingerostet und überholt, naja is tauch schon 15 - 20 Jahre her dass ich mich damit gross beschäftigt habe.
LG Heinze
Mitglied: 144260
144260 May 11, 2020 updated at 08:13:44 (UTC)
Goto Top
Zitat von @Heinze:
Wenn ich mir das so durchschaue finde ich leider mehr Fragen für mich als wie " ahh so geht das - da war mein Fehler!"
Eigentlich ist jede Zeile kommentiert ... wozu hab ich das dann gemacht??
Die Lösung mit : >"%ziel%" (for /f "usebackq delims=" %%a in ("%liste%") do ... ist mir komplett neu.. .
Kannsst du mir das mal erklären bitte, ich will ja auch noch was lernen und was verstehen von der Lösung.
Alles was innerhalb der folgenden Klammer ausgegeben wird landet in der Textdatei, ganz einfach face-smile.
Manchmal setzt du dieverschiedenen Anweisung zB. set "blockstart=1" in "" machmal nicht - wieso so?
Das war nur ein Versehen beim letzten set, generell ist das Einfassen in Anführungszeichen eine gute Idee weil sich sonst Leerzeichen hinter den Werten als Fehlerquelle erweisen könnten, zweitens (ist hier in diesem Beispiel zwar nicht von Belang) wenn Leerzeichen in Pfaden vorkommen.
Nun hab ich ein lauffähiges Script aber immer noch keinen Durchblick
Wozu habe ich jede Zeile denn kommentiert?? War wohl mal wieder für die Katz, au Banan face-sad.
Irgendwie ist mein Wissen komplett eingerostet und überholt, naja is tauch schon 15 - 20 Jahre her dass ich mich damit gross beschäftigt habe.
Dort sollte es am besten auch bleiben, lerne besser gleich Powershell wenn du unter Windows hantierst, davon hast du definitiv mehr als von diesem 80er Jahre Spökes.
Außerdem dachte ich, wir befinden uns hier doch in einem Admin-Forum wo man nicht alle zwei Threads Batch Allgemeinwissen beibringen muss, zumal diese seit 40 Jahren allseits bekannt sind und man diese auch überall im Web nachlesen kann?!