jweghorn
Goto Top

Suche Skript für Batch-Datei, um eine Spaltenbezeichnung innerhalb einer CSV-Datei umzubenennen

Hallo zusammen,

ich habe eine CSV-Datei, die wie eine Excel-Tabelle mit ";"-Trenner aufgebaut ist.

Darin gibt es eine Spaltenbezeichnung, die "M" heißt. Das Skript muss aber ein "%"-Zeichen
hinzufügen, sodass die Spalte danach "M%" heißt.

Das Skript muss die vorhandene Datei noch überspeichern und fertig.

Hat einer eine Idee wie das mit normalem Batch-Skrip geht (ev. auch Powershell)?

Schon jetzt vielen Dank für Eure Hilfe.

Gruss
Jörg

Content-Key: 393679

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

Printed on: April 18, 2024 at 15:04 o'clock

Mitglied: 137846
137846 Nov 23, 2018 updated at 10:54:34 (UTC)
Goto Top
PS
$datei = 'C:\datei.csv'  
$content = gc $datei
$content -replace '(;"?)(M|S)("?;)','$1$2%$3'  
$content | sc $datei -Force
oder auch:
(Import-CSV 'C:\datei.csv' -delim ";") | select *,@{n='M%';e={$_.M}},@{n='S%';e={$_.S}} -ExcludeProperty M,S | Export-Csv 'C:\datei.csv' -Delimiter ";" -NoType -Encoding UTF8  
Gruß A.
Member: Kraemer
Kraemer Nov 23, 2018 updated at 10:41:36 (UTC)
Goto Top
Zitat von @137846:

PS
> $content -replace ';M;','';M%;'>   

ein Hochkomma zuviel und es fehlen wahrscheinlich die "

> $content -replace ';"M";',';"M%";'>   

face-wink
Mitglied: 137846
137846 Nov 23, 2018 updated at 10:43:51 (UTC)
Goto Top
Uups Typo, korrigiert.
Member: jweghorn
jweghorn Nov 23, 2018 at 10:51:02 (UTC)
Goto Top
Hallo und vielen Dank erst einmal für die schnelle Antwort.
Irgendwie klappt es nicht.

So sieht die CSV in Excel aus:
BA VL MGNR LA KDNR BNR BDAT BRUTTO NETTO MWST M FAELLIG S W
1 2055680 1127730 11 15101 1/225155 21.11.2018 2530,18 2126,2 403,98 19 25.12.2018 3 EUR
1 2055680 1207500 11 14044 1/225150 21.11.2018 1795,71 1509 286,71 19 25.12.2018 3 EUR

IN der CSV sieht es so aus:
BA;VL;MGNR;LA;KDNR;BNR;BDAT;BRUTTO;NETTO;MWST;M;FAELLIG;S;W
1;2055680;1127730;11;15101;1/225155;2018-11-21;2530,18;2126,20;403,98;19;25.12.2018;3;EUR
1;2055680;1207500;11;14044;1/225150;2018-11-21;1795,71;1509,00;286,71;19;25.12.2018;3;EUR

Die CSV soll nach ausführen der "Ersetzen.bat"-Datei so aussehen:
BA;VL;MGNR;LA;KDNR;BNR;BDAT;BRUTTO;NETTO;MWST;M%;FAELLIG;S%;W
1;2055680;1127730;11;15101;1/225155;2018-11-21;2530,18;2126,20;403,98;19;25.12.2018;3;EUR
1;2055680;1207500;11;14044;1/225150;2018-11-21;1795,71;1509,00;286,71;19;25.12.2018;3;EUR

Bei den Spalten mit den Namen "M" und "S" soll danach stehen "M%" und "S%"

Könntest Du mir hier bitte nochmal helfen?

Gruss
Jörg
Mitglied: 137846
137846 Nov 23, 2018 updated at 10:52:38 (UTC)
Goto Top
S. Anpassung oben.
Member: jweghorn
jweghorn Nov 23, 2018 updated at 11:04:09 (UTC)
Goto Top
es tut mir unendlich leid und nochmals vielen Dank, aber ich bekomme es nicht hin:
hier mein Original-Script:

$datei = C:\Users\user\Desktop\Test\test.csv
$content = gc $datei
$content -replace '(;"?)(M|S)("?;)','$1$2%$3'
$content | sc $datei -Force

Nach Doppelklick auf die Batch - wurden die Spaltenbezeichnungen in der CSV nicht geändert.

??
Mitglied: 137846
137846 Nov 23, 2018 updated at 11:05:28 (UTC)
Goto Top
Nach Doppelklick auf die Batch -
face-big-smile Wolle mich verarsche? Det is Powershell min jung!
Member: jweghorn
jweghorn Nov 23, 2018 at 11:11:19 (UTC)
Goto Top
Bitte entschuldige, wenn ich mich hier als Laie oute.
Ich habe aber bereits diverse Batch-Dateien, in denen Powershell ausgeführt wird und
z.B. aus einer CSV den HTML-Code entfernt (Thema ist hier auf der Plattform).
Funktioniert auch nur über eine ausführende Batch als Powershell-Befehl.
Letztlich muss es eine "Ersetzen.bat"-Datei sein, welche die Änderungen an
der CSV bewirkt.
Darf ich somit nochmal nachfragen, was ich anders muss, damit es klappt?
Gruss und sorry, dass ich mich hier so anstelle.
Jörg
Member: Kraemer
Kraemer Nov 23, 2018 at 11:20:40 (UTC)
Goto Top
Freitag...
Member: Kraemer
Kraemer Nov 23, 2018 at 12:29:46 (UTC)
Goto Top
wat solls - auch wenn hier hundertfach zu finden

powershell -Executionpolicy Bypass -NoProfile -Command "(Import-CSV 'C:\datei.csv' -delim ";") | select *,@{n='M%';e={$_.M}},@{n='S%';e={$_.S}} -ExcludeProperty M,S | Export-Csv 'C:\datei.csv' -Delimiter ";" -NoType -Encoding UTF8"  
Mitglied: 137846
137846 Nov 23, 2018 updated at 12:39:55 (UTC)
Goto Top
Zitat von @Kraemer:

wat solls - auch wenn hier hundertfach zu finden

powershell -Executionpolicy Bypass -NoProfile -Command "(Import-CSV 'C:\datei.csv' -delim ";") | select *,@{n='M%';e={$_.M}},@{n='S%';e={$_.S}} -ExcludeProperty M,S | Export-Csv 'C:\datei.csv' -Delimiter ";" -NoType -Encoding UTF8"  

Leider die doppelten Anführungszeichen innerhalb der doppelten nicht escaped oder durch Hochkommas ersetzt ;-P
Member: Kraemer
Kraemer Nov 23, 2018 at 13:47:39 (UTC)
Goto Top
Zitat von @137846:
Leider die doppelten Anführungszeichen innerhalb der doppelten nicht escaped oder durch Hochkommas ersetzt ;-P
touché face-big-smile
Member: jweghorn
jweghorn Nov 26, 2018 at 08:10:07 (UTC)
Goto Top
Erst einmal vielen Dank an Euch alle.
Mit dem powershell hat es nicht geklappt. Es kamen immer Fehlermeldungen, die ich nicht deuten konnte.

Aber so hier geht es auch:

@echo off &setlocal DisableDelayedExpansion
set "Von1=M;"
set "Nach1=M%%;"
set "Von2=S;"
set "Nach2=S%%;"
set "Datei=Importdatei_vorher.csv"
set "t=temp.csv"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do (
set "Line=%%i"
setlocal EnableDelayedExpansion
echo !Line:%Von1%=%Nach1%!>>%t%
endlocal
)
set "Datei=temp.csv"
set "t=Exportdatei_nachher.csv"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do (
set "Line=%%i"
setlocal EnableDelayedExpansion
echo !Line:%Von2%=%Nach2%!>>"%t%"
endlocal
)
del temp.csv
type Exportdatei_nachher.csv

Nochmals Danke an alle.
Gruss
Jörg