diddi-tb
Goto Top

Mit Batchdatei Inhalte einer csv ändern

Hallo zusammen,

ich benötige mal wieder euren Rat. Zum Abgleich in unserer Warenwirtschaft muss ich eine csv Datei anpassen. Dies hat in der ersten Spalte EAN Nummern, einige dieser Nummern haben den Zusatz _afn und sehen so aus: 1234567891234_afn

Nun möchte ich mit Hilfe einer Batchdatei den Anhang _afn entfernen. Hier im Forum habe ich schon einige Beiträge gefunden die mir weitergeholfen haben. Im Moment sieht die Batchdatei so aus:

setlocal enabledelayedexpansion

SET "quell_datei=C:\FNSKU\*.csv"
SET "ziel_datei=C:\FNSKU\FNSKU.csv"
SET "suchen_nach=_afn"
SET "ersetzen_durch="

REM Ausgabe einer Fehlermeldung und Programmabbruch
REM falls die Variable "suchen_nach" nicht definiert ist
IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof)

REM Loeschen der Ausgabedatei, falls sie (noch) existiert
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL)

REM Quell-Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :weiter
:ersetzen
REM innerhalb der Variable "zeile"
REM den Inhalt der Variable "suchen_nach" suchen
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%!

REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben
IF [!zeile!] EQU (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)
GOTO :eof

:weiter
REM weitere Verarbeitung

pause

Hier eine Beispielzeile aus meiner Ausgangsdatei:

"018463769372_afn","X000FDP11D","B0007TMOFS","NewItem","SELLABLE","0"

Nach dem Durchlauf der Batchdatei sieht sie so aus:

C:\FNSKU\16133574089018026.csv:"018463769372","X000FDP11D","B0007TMOFS","NewItem","SELLABLE","0"


Das _afn wird wie gewünscht entfern, allderdings wird der Pfad der Ausgangsdatei C:\FNSKU\16133574089018026.csv: hinzugefügt. Allerdings kann ich die Zieldatei so nicht gebrauchen. Gibt es eine Möglichkeit die Datei so anzupassen, das die Pfadangabe nicht mit in die Zieldatei geschrieben wird?

Gerne nehme ich auch andere Ideen zum lösen der Thematik an. Es mit einer Batchdatei zu lösen war für mich als Nichtprogrammierer der einfachste Weg.

Vorab schon mal vielen Dank!

Gruß

Stefan

Content-ID: 452245

Url: https://administrator.de/forum/mit-batchdatei-inhalte-einer-csv-aendern-452245.html

Ausgedruckt am: 24.12.2024 um 02:12 Uhr

139708
139708 16.05.2019 aktualisiert um 11:13:09 Uhr
Goto Top
Moin.
Für sowas nimmt man heutzutage objektorientierte Skriptsprachen wie z.B. Powershell
Ich gehe hier davon aus das die CSV keine Überschriften hat, da du keine erwähnst. Ersetzt wird "Inplace" für alle CSV Dateien eines Ordners.
dir 'C:\FNSKU' -File -Filter *.csv | %{  
    $csv = Import-CSV $_.Fullname -Delimiter ","  
    $csv | %{$_.'seller-sku' = $_.'seller-sku' -replace '_afn$',''}  
    $csv | Export-Csv $_.Fullname -Delimiter "," -NoType -Encoding UTF8  
}
Gruß wireguard
Diddi-tb
Diddi-tb 16.05.2019 um 10:35:56 Uhr
Goto Top
Moin,

Danke für Deine Rückmeldung.

Zitat von @139708:
Für sowas nimmt man heutzutage objektorientierte Skriptsprachen wie z.B. Powershell

Da hast Du bestimmt recht, es war eben die Herangehensweise in die ich mich am einfachsten einlesen konnte.


Zitat von @139708:
Ich gehe hier davon aus das die CSV keine Überschriften hat, da du keine erwähnst. Ersetzt wird "Inplace" für alle CSV Dateien eines Ordners.

Es gibt eine Kopfzeile, dachte das wäre für das entfernen nicht wichtig. Die Kopfzeile sieht wie folgt aus:
"seller-sku","fulfillment-channel-sku","asin","condition-type","Warehouse-Condition-code","Quantity Available"


Zitat von @139708:
> dir 'C:\FNSKU' -File -Filter *.csv | %{  
>     $csv = Import-CSV $_.Fullname -Delimiter "," -Header (1..6)  
>     $csv | %{$_.1 = $_.1 -replace '_afn$',''}  
>     $csv | ConvertTo-Csv -Delimiter "," | Select -skip 1 | sc $_.Fullname  
> }
> 

Dieser Code ist dann für Powershell gedacht?

Gruß Stefan
139708
Lösung 139708 16.05.2019 um 10:45:50 Uhr
Goto Top
Ja das ist Powershell. Habe den Code an deine neuen Bedingungen oben angepasst.

Gruß w.