Bestimmte Daten aus CSV per Windows BATCH Datei in .txt Format schreiben lassen.
Hallo Gemeinde,
leider zerbreche ich mir gerade den Kopf beim Erstellen einer Batch Datei, wie ich am besten Werte aus einer exportierten .CSV Liste auslesen kann,
die dann in einem bestimmten Format in eine .txt Liste geschrieben werden sollen (Semikolon-getrennt), wenn der Zahlenwert in einer bestimmten Spalte > (größer als) 0 ist.
Alle Daten würden in einem TEST Ordner auf dem Desktop liegen.
Die .CSV ist wie folgt aufgebaut:
Per Batch-Datei (.bat) sollen zunächst die Zeilen ausgelesen werden und wenn die "18. Spalte" (TAXE3) > (größer als) 0 ist, dann soll diese Zeile, wo der Wert > (größer als) 0 ist, in eine .txt Datei geschrieben werden, einfach hintereinander.
Die Zeilen in der .txt Datei sollen wie folgt sein:
"Kopf, Rechnung , Daten , R-1 , Ja" sowie die Semikolons müssen zwischen NR4 und NR1 stehen bleiben.
Hat der wer von Euch eine Idee?
Wenn also mehrere Datensätze mit > (größer als) 0 vorhanden sind, soll die Batch Datei diese einfach in der TXT Datei hintereinander schreiben:
Ich freue mich auf eine rege Beteiligung
leider zerbreche ich mir gerade den Kopf beim Erstellen einer Batch Datei, wie ich am besten Werte aus einer exportierten .CSV Liste auslesen kann,
die dann in einem bestimmten Format in eine .txt Liste geschrieben werden sollen (Semikolon-getrennt), wenn der Zahlenwert in einer bestimmten Spalte > (größer als) 0 ist.
Alle Daten würden in einem TEST Ordner auf dem Desktop liegen.
Die .CSV ist wie folgt aufgebaut:
NR,NR1,NR2,NR3,NAME,VORNAME,PLZ,ORT,STRASSE,DATUM1,DATUM2,ARTIKELNAME,NR4,MENGE,TAXE,TAXE1,BRUTTO,TAXE3,NR5,NR6,NR7,
Per Batch-Datei (.bat) sollen zunächst die Zeilen ausgelesen werden und wenn die "18. Spalte" (TAXE3) > (größer als) 0 ist, dann soll diese Zeile, wo der Wert > (größer als) 0 ist, in eine .txt Datei geschrieben werden, einfach hintereinander.
Die Zeilen in der .txt Datei sollen wie folgt sein:
Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;
"Kopf, Rechnung , Daten , R-1 , Ja" sowie die Semikolons müssen zwischen NR4 und NR1 stehen bleiben.
Hat der wer von Euch eine Idee?
Wenn also mehrere Datensätze mit > (größer als) 0 vorhanden sind, soll die Batch Datei diese einfach in der TXT Datei hintereinander schreiben:
Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;Kopf;Rechnung;NR3;Daten;R-1;TAXE3;Ja;ARTIKELNAME;NR4;;;;;;;;;NR1;DATUM1;DATUM2;
Ich freue mich auf eine rege Beteiligung
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 332451
Url: https://administrator.de/forum/bestimmte-daten-aus-csv-per-windows-batch-datei-in-txt-format-schreiben-lassen-332451.html
Ausgedruckt am: 04.04.2025 um 17:04 Uhr
9 Kommentare
Neuester Kommentar

Moin.
Würde ich stattdessen schnell mit Powershell abfackeln:
Wenn's immer noch das verstaubte Batch sein muss:
Den anderen ging es bestimmt nicht anders, sieht man an der Beteiligung ;-P
Gruß p.
Würde ich stattdessen schnell mit Powershell abfackeln:
$quelle = "$env:USERPROFILE\Desktop\TEST\quelle.csv"
$ziel = "$env:USERPROFILE\Desktop\TEST\ziel.txt"
$csvdata = Import-csv $quelle -Delimiter ","
($csvdata | ?{[double]$_.TAXE3 -gt 0} | %{"Kopf;Rechnung;$($_.NR3);Daten;R-1;$($_.TAXE3);Ja;$($_.Artikelname);$($_.NR4);;;;;;;;;$($_.NR1);$($_.Datum1);$($_.Datum2);"}) -join "" | set-content $ziel
@echo off &setlocal
set "quelle=%userprofile%\Desktop\TEST\quelle.csv"
set "ziel=%userprofile%\Desktop\TEST\ziel.txt"
>"%ziel%" (for /f "usebackq skip=1 tokens=1-21 delims=," %%a in ("%quelle%") DO if %%r GTR 0 echo|set /p="Kopf;Rechnung;%%d;Daten;R-1;%%r;Ja;%%l;%%m;;;;;;;;;%%b;%%j;%%k;")
Ich freue mich auf eine rege Beteiligung
Naja, ich habe den Text bestimmt 20 mal lesen müssen bevor mir klar war was eigentlich gewünscht ist, zumal das auseinanderhalten der Variablen und statischen Text hier nicht nicht ganz eindeutig ist.Den anderen ging es bestimmt nicht anders, sieht man an der Beteiligung ;-P
Gruß p.

Wenn ich richtig liege, muss ich zum testen das ganze wie folgt anpassen, oder?
Nein brauchst du nicht, die Variable %userprofile% enthält schon den Pfad zum Userprofil des aktuellen Users 
Kann es an Win10 liegen?
Nein! Es fehlt bei dir die 0 in der if condition ...Eine Frage habe ich allerdings noch: "Wie kann ich verhindern, dass in der ziel.txt am ende kein umbruch eingefügt wird?"
Bei Set-Content den Parameter -NoNewline angeben!Dann bitte noch als gelöst markieren. Danke.
p.s. Man kann seine Antworten bearbeiten, da braucht es nicht 5 neue Kommentare hintereinander