compubatch
Goto Top

Batch - bestimmte Spalten addieren und ausgeben

Hallo Gemeinde!

Als bisheriger stiller Mitleser, suche ich jetzt auch nach einer Lösung / Ansatz um eine Text-Datei mit Hilfe einer Batch-Datei aufzubereiten.

Text-Datei mit nachfolgendem Aufbau:

TEST-1;XYZ;0,25;
TEST-1;XYZ;0,25;
TEST-2;XYZ;0,25;
TEST-2;XYZ;0,25;
TEST-2;XYZ;0,75;

Jetzt würde ich gerne die 3. Spalte anhand der 1. Spalte zusammenrechnen und einer weiteren Text-Datei ausgeben lassen:

TEST-1;XYZ;0,5;
TEST-2;XYZ;1,25;

Ist das mit Batch möglich?

Content-Key: 3609137555

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

Printed on: April 24, 2024 at 13:04 o'clock

Mitglied: 3479126418
Solution 3479126418 Aug 10, 2022 updated at 14:00:31 (UTC)
Goto Top
@echo off
set "quelle=D:\quelle.csv"  
set "ziel=D:\ziel.csv"  
powershell -EP Bypass -C "(Import-CSV '%quelle%' -Delimiter ';' -Header (1..4) | Group '1' | foreach{$_.Group.3 = ($_.Group.3 | foreach{[decimal]::Parse($_,[cultureinfo]'de')} | measure -Sum).Sum;$_.Group} | Convertto-CSV -Delimiter ';' -NoTypeInformation | select -skip 1) -replace '\"' | set-content '%ziel%'"  
Ist das mit Batch möglich?
Mit Batch geht einiges aber ob das ehrlich gesagt noch sinnvoll ist?! Ich fahr ja heute auch nicht mehr mit ner Dampflok jeden Tag zur Arbeit ...

p.s. Warum macht ihr bei CSV-Dateien in der letzten Spalte immer noch ein abschließendes Semikolon?? ein Semikolon am Ende sagt im Normalfall "hier kommt danach noch eine weitere Spalte", ist also überflüssig.
Member: CompuBatch
CompuBatch Aug 10, 2022 at 14:40:46 (UTC)
Goto Top
Ich habe jetzt folgende quelle.csv:

TEST-1;XYZ;0,25
TEST-1;XYZ;0,25
TEST-2;XYZ;0,25
TEST-2;XYZ;0,25
TEST-2;XYZ;0,75

Ich bekomme aber irgendwie keine Ausgabe.

Batch habe ich 1:1 kopiert:

@echo off
set "quelle=C:\Users\Administrator\Desktop\quelle.csv"  
set "ziel=C:\Users\Administrator\Desktop\ziel.csv"  
powershell -EP Bypass -C "(Import-CSV '%quelle%' -Delimiter ';' -Header (1..4) | Group '1' | foreach{$_.Group.3 = ($_.Group.3 | foreach{[decimal]::Parse($_,[cultureinfo]'de')} | measure -Sum).Sum;$_.Group} | Convertto-CSV -Delimiter ';' -NoTypeInformation | select -skip 1) -replace '\"' | set-content '%ziel%'"  



Zitat von @CompuBatch:

Hallo Gemeinde!

Als bisheriger stiller Mitleser, suche ich jetzt auch nach einer Lösung / Ansatz um eine Text-Datei mit Hilfe einer Batch-Datei aufzubereiten.

Text-Datei mit nachfolgendem Aufbau:

TEST-1;XYZ;0,25;
TEST-1;XYZ;0,25;
TEST-2;XYZ;0,25;
TEST-2;XYZ;0,25;
TEST-2;XYZ;0,75;

Jetzt würde ich gerne die 3. Spalte anhand der 1. Spalte zusammenrechnen und einer weiteren Text-Datei ausgeben lassen:

TEST-1;XYZ;0,5;
TEST-2;XYZ;1,25;

Ist das mit Batch möglich?
Member: rubberman
Solution rubberman Aug 10, 2022 at 18:34:08 (UTC)
Goto Top
Batch habe ich 1:1 kopiert
... und (sorry wenn ich das so sagen muss) nicht versucht zu verstehen.

Ich habe jetzt folgende quelle.csv
Die hat jetzt nur noch 3 und nicht 4 Spalten, da Zeilen nicht mehr mit Semikolon enden. Also wird das ein -Header (1..3) im Code.

Ich bekomme aber irgendwie keine Ausgabe.
Wenn du die Anführungszeichen zählst, siehst du, dass sie durch das -replace '\"' unpaarig geworden sind. Somit ist die letzte Pipe nicht mehr in einem in Anführungszeichen eingefassten Bereich und muss für das Parsen im CMD Prozess mit ^ escaped werden.

powershell -EP Bypass -C "(Import-CSV '%quelle%' -Delimiter ';' -Header (1..3) | Group '1' | foreach{$_.Group.3 = ($_.Group.3 | foreach{[decimal]::Parse($_,[cultureinfo]'de')} | measure -Sum).Sum;$_.Group} | Convertto-CSV -Delimiter ';' -NoTypeInformation | select -skip 1) -replace '\"' ^| set-content '%ziel%'"  

Steffen