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-Key: 452245

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

Printed on: April 16, 2024 at 10:04 o'clock

Mitglied: 139708
139708 May 16, 2019 updated at 09:13:09 (UTC)
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
Member: Diddi-tb
Diddi-tb May 16, 2019 at 08:35:56 (UTC)
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
Mitglied: 139708
Solution 139708 May 16, 2019 at 08:45:50 (UTC)
Goto Top
Ja das ist Powershell. Habe den Code an deine neuen Bedingungen oben angepasst.

Gruß w.