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-ID: 393679

Url: https://administrator.de/forum/suche-skript-fuer-batch-datei-um-eine-spaltenbezeichnung-innerhalb-einer-csv-datei-umzubenennen-393679.html

Ausgedruckt am: 17.02.2025 um 01:02 Uhr

137846
137846 23.11.2018 aktualisiert um 11:54:34 Uhr
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.
Kraemer
Kraemer 23.11.2018 aktualisiert um 11:41:36 Uhr
Goto Top
Zitat von @137846:

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

ein Hochkomma zuviel und es fehlen wahrscheinlich die "

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

face-wink
137846
137846 23.11.2018 aktualisiert um 11:43:51 Uhr
Goto Top
Uups Typo, korrigiert.
jweghorn
jweghorn 23.11.2018 um 11:51:02 Uhr
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
137846
137846 23.11.2018 aktualisiert um 11:52:38 Uhr
Goto Top
S. Anpassung oben.
jweghorn
jweghorn 23.11.2018 aktualisiert um 12:04:09 Uhr
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.

??
137846
137846 23.11.2018 aktualisiert um 12:05:28 Uhr
Goto Top
Nach Doppelklick auf die Batch -
face-big-smile Wolle mich verarsche? Det is Powershell min jung!
jweghorn
jweghorn 23.11.2018 um 12:11:19 Uhr
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
Kraemer
Kraemer 23.11.2018 um 12:20:40 Uhr
Goto Top
Freitag...
Kraemer
Kraemer 23.11.2018 um 13:29:46 Uhr
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"  
137846
137846 23.11.2018 aktualisiert um 13:39:55 Uhr
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
Kraemer
Kraemer 23.11.2018 um 14:47:39 Uhr
Goto Top
Zitat von @137846:
Leider die doppelten Anführungszeichen innerhalb der doppelten nicht escaped oder durch Hochkommas ersetzt ;-P
touché face-big-smile
jweghorn
jweghorn 26.11.2018 um 09:10:07 Uhr
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