Datei suchen und Dateiname in CSV einfügen
Hallo ich habe eine recht große CSV Datei, welche Artikeldaten enthält und später in einen Onlineshop importiert werden soll.
Die CSV ist zum größten Teil fertig was nun fehlt sind die Verknüpfungen zu Bildern.
Ist es möglich eine Batchdatei zu schreiben womit folgende Abhandlungen durchgeführt werden können:
1. Wert aus einer bestimmten Spalte einer CSV auslesen (Bsp.: Artikelnummer)
2. Datei mit dem Spaltenwert von 1. auf FTP suchen (Bsp. Artikelnummer.jpg)
3. Wenn Datei mit dem Spaltenwert von 1. vorhanden dann Link in eine Spalte der CSV einfügen (http://www.meineseite.de/artikelnummer.jpg) wenn Datei nicht vorhanden dann in der nächsten Zeile weiter suchen.
Das ganze dann für alle Zeilen der CSV (ca. 23.000).
Evtl. kann mir von euch jemand Helfen da ich mir hier schon einige Tips für die Batchprogrammierung holen konnte.
Die CSV ist zum größten Teil fertig was nun fehlt sind die Verknüpfungen zu Bildern.
Ist es möglich eine Batchdatei zu schreiben womit folgende Abhandlungen durchgeführt werden können:
1. Wert aus einer bestimmten Spalte einer CSV auslesen (Bsp.: Artikelnummer)
2. Datei mit dem Spaltenwert von 1. auf FTP suchen (Bsp. Artikelnummer.jpg)
3. Wenn Datei mit dem Spaltenwert von 1. vorhanden dann Link in eine Spalte der CSV einfügen (http://www.meineseite.de/artikelnummer.jpg) wenn Datei nicht vorhanden dann in der nächsten Zeile weiter suchen.
Das ganze dann für alle Zeilen der CSV (ca. 23.000).
Evtl. kann mir von euch jemand Helfen da ich mir hier schon einige Tips für die Batchprogrammierung holen konnte.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188336
Url: https://administrator.de/forum/datei-suchen-und-dateiname-in-csv-einfuegen-188336.html
Ausgedruckt am: 17.02.2025 um 01:02 Uhr
6 Kommentare
Neuester Kommentar
moin Kariya,
möglich ist das schon.
Erstmal ein paar Gegenfragen.
Um die wievielte Spalte handelt es sich denn bei den zu suchenden (Datei)namen in der CSV?
Ist das Semikolon das Trennzeichen?
Steht in jeder Spalte ein Wert (wenigstens ein Leerzeichen)?
In die Wievielte Spalte soll der Link bei Fund eingetragen werden?
Handelt es sich dabei um nur eine FTP Seite?
Gruß Phil
möglich ist das schon.
Erstmal ein paar Gegenfragen.
Um die wievielte Spalte handelt es sich denn bei den zu suchenden (Datei)namen in der CSV?
Ist das Semikolon das Trennzeichen?
Steht in jeder Spalte ein Wert (wenigstens ein Leerzeichen)?
In die Wievielte Spalte soll der Link bei Fund eingetragen werden?
Handelt es sich dabei um nur eine FTP Seite?
Gruß Phil
moin Kariya,
Dazu musst Du Dir noch, wenn nötig, die wget.exe herunterladen.
Der Batch schreibt Dir erst die volle Verzeichnissliste des Servers fertig und schreibt dann eine neue CSV.
Die FehlerUmleitung vom wget ist so gewollt, da wget das Handle 2 für alle möglichen Meldungen nutzt muss es wieder in Handle 1 (STDOUT) dubliziert werden, um mit den Ausgaben in einer Befehlskette zu arbeiten.
Gruß Phil
Dazu musst Du Dir noch, wenn nötig, die wget.exe herunterladen.
Der Batch schreibt Dir erst die volle Verzeichnissliste des Servers fertig und schreibt dann eine neue CSV.
Die FehlerUmleitung vom wget ist so gewollt, da wget das Handle 2 für alle möglichen Meldungen nutzt muss es wieder in Handle 1 (STDOUT) dubliziert werden, um mit den Ausgaben in einer Befehlskette zu arbeiten.
@echo off
setlocal
rem nur den Pfad zur wget.exe angeben
set "wgetPath=D:\wsusoffline\bin\"
set "Server=ftp://ftp.freenet.de/debian/"
rem InklusiveListe Dateiendung Trennung mit Komma
rem bei allen Dateien nichts angeben
set "Typ=bmp,jpg"
set InCSVList="D:\test\IN.txt"
set OutCSVList="D:\test\Out.txt"
type nul>%OutCSVList%
rem wget in Path eintragen
(echo ;%path:;=;&echo(;%;)|find /i ";%wgetpath%;" >nul || set "path=%path%;%wgetpath%"
rem prüfe ob wget gefunden
(wget) 2>&1 |findstr /n "Befehl nicht" &&echo(&&echo wget.exe nicht gefunden. Bitte Pfad angeben!&& exit /b 1
set Wgetlog="%temp%\Wget.log"
set Wgettemp="%temp%\Wgettemp"
if defined typ set "Typ=-A %typ%"
echo Teste Server ...
(wget --spider %server% -nv -nd) 2>&1 |find "]" >nul &&echo Erfolgreich.||echo Serverfehler.&& echo(&& (wget --spider %server% -nv -nd &exit /b 2)
echo Erstelle Liste des FTP-Verzeichnisses
echo dies kann einige Minuten Dauern
echo Bitte Warten ...
(wget --spider %server% %typ% -r -nv -nd) 2>&1 |find "]" |find /v ".listing" >%wgettemp%
>%wgetlog% (for /f "usebackq tokens=4" %%i in (%wgettemp%) do @echo %%l)
echo Verzeichnissliste vom Server wurde erstellt.
echo Vergleiche CSV mit Verzeichnissen.
for /f "usebackq delims=" %%i in (%InCSVList%) do set "Line=%%i" & call :search
goto :weiter
:search
set "Line= %Line:;=; %"
for /f "tokens=1-22*delims=;" %%a in ("%Line%") do (
set "Name=%%b"
set "Part1=%%a;%%b;%%c;%%d;%%e;%%f;%%g;%%h;%%i;%%j;%%k;%%l;%%m;%%n;%%o;%%p;%%q;%%r;%%s;%%t;%%u;"
set "Part3=;%%w"
call :write
)
exit /b
:write
set "Name=%Name:; =;%"
set "URL="
for /f "Delims=" %%i in ('findstr /e "\/%Name%...." %wgetlog% ') do set "URL=%%i"
setlocal enabledelayedexpansion
set "Line=!Part1!!URL!!Part2!"
set "Line=!Line:* =!"
set "Line=!Line:; =;!"
>>%OutCSVList% echo !Line!
endlocal
exit /b
:weiter
echo CSV Fertiggestellt.
exit /b 0
Gruß Phil