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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 452245
Url: https://administrator.de/contentid/452245
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
3 Kommentare
Neuester Kommentar
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.
Gruß wireguard
Für sowas nimmt man heutzutage objektorientierte Skriptsprachen wie z.B. Powershell
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
}
Ja das ist Powershell. Habe den Code an deine neuen Bedingungen oben angepasst.
Gruß w.
Gruß w.