Batch: CSV per CSV durchsuchen geht nicht?
Hallo Leute Ich habe folgendes Problem
set "quellordner=K:CSV"
set "zielordner=K:\CSV\ende"
pushd "%quellordner%"
for /f "delims=" %%i in ('dir /b /a-d fertig.csv') do findstr /v "4056204302446" "%%i">"%zielordner%\%%i"
popd
Das Batch Script durchsucht die CSV und speichert alle Zeilen in denen nicht 4056204302446 vorkommt.
Nun soll es aber umgedreht sein! In der Datei sollen nachher nur noch die Zeilen stehen die 4056204302446 enthalten! Den Wert 4056204302446 würde ich dabei gern in einer weiteren CSV speichern können (also eine durchsuchen csv).
Eigentlich soll er die fertig.csv durchsuchen mit der werte.csv und immer wenn der Wert vorkommt die Zeile in eine neue Datei schreiben.
2 Antworten
Der allereinfachste Weg wäre:
Lass einfach das "/v" weg.
Schau Dir mal die Optionen des FINDSTR-Befehls in Deiner Windows-Version an:
FINDSTR /?
––––––––––––––––––––––––––––––––––––––––––––––––––
Ich möchte aber auch mal den Vorschlag von BlvckBytes aufgreifen:
VBScript bietet sehr viel mehr Möglichkeiten, erfordert aber dafür etwas mehr Quellcode.
Du kannst damit die CSV-Datei direkt öffnen und Zeilenweise auslesen. Hinzu kommt, dass Du für komplexere Abfragen u.a. auch RegExp-Ausdrücke verwenden kannst.
So mal so ein Code-Beispiel:
Option Explicit
Const fnIn = "fertig.csv"
Const fnOut = "gefiltert.csv"
Const SearchString =Dim fso, tsIn, tsOut, line
"4056204302446"
Set fso = CreateObject("Scripting.FileSystemObject")
Set tsIn = fso.OpenTextFile(fnIn, ReadMode, False)Set tsOut = fso.OpenTextFile(fnOut, WriteMode, True)
Do While Not tsIn.AtEndOfStream
line = tsIn.ReadLine
If InStr(1, line, SearchString) Then
tsOut.WriteLine line
End If
Loop
tsIn.Close
tsOut.Close
Anstatt einer einfachen Text-Positions-Abfrage (InStr) kannst Du hier dann auch ein RegEx-Objekt benutzen.
Das kannst Du dann auch mit einem DirDiver-Algorithmus erweitern.
Warum machst du das mit Batch und nicht mit einer Höheren Sprache?
LG BlvckBytes
was meinst du mit höhere Sprache. Welche es ist mir erstmal egal. Ich habe alles bis jetzt immer mit Batch gemacht. Wenn es mit der Shell geht auch gut. Ich habe da kaum Ahnung und suche es mir eher zusammen.
Kannst du mir helfen?