Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Datei suchen und Dateiname in CSV einfügen

Frage Entwicklung Batch & Shell

Mitglied: Kariya

Kariya (Level 1) - Jetzt verbinden

19.07.2012 um 22:32 Uhr, 2918 Aufrufe, 6 Kommentare

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.
Mitglied: pieh-ejdsch
20.07.2012 um 20:30 Uhr
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
Bitte warten ..
Mitglied: Kariya
23.07.2012 um 17:56 Uhr
Hallo Phil,

Ich möchte kurz auf deine Fragen eingehen.

1. der zu suchende Name befindet sich in Spalte 2
2. Trennsymbol ist das Semikolon
3. Nein in leeren Spalten steht kein Wert (auch kein Freizeichen)
4. Eingetragen werden soll der Wert dann in Spalte 22
5. Ja es wird sich nur um ein FTP-Verzeichnis handeln

Falls du eine Beispieldatei benötigst kann ich dir auch gern eine zukommen lassen.

Grüße Kariya
Bitte warten ..
Mitglied: pieh-ejdsch
25.07.2012, aktualisiert 09.08.2012
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.

01.
@echo off 
02.
setlocal 
03.
 
04.
 rem nur den Pfad zur wget.exe angeben 
05.
set "wgetPath=D:\wsusoffline\bin\" 
06.
set "Server=ftp://ftp.freenet.de/debian/" 
07.
 
08.
 rem InklusiveListe Dateiendung Trennung mit Komma 
09.
 rem bei allen Dateien nichts angeben 
10.
set "Typ=bmp,jpg" 
11.
set InCSVList="D:\test\IN.txt" 
12.
set OutCSVList="D:\test\Out.txt" 
13.
type nul>%OutCSVList% 
14.
 
15.
 rem wget in Path eintragen 
16.
(echo ;%path:;=;&echo(;%;)|find /i ";%wgetpath%;" >nul || set "path=%path%;%wgetpath%" 
17.
 rem prüfe ob wget gefunden 
18.
(wget) 2>&1 |findstr /n "Befehl nicht" &&echo(&&echo wget.exe nicht gefunden. Bitte Pfad angeben!&& exit /b 1 
19.
 
20.
set Wgetlog="%temp%\Wget.log" 
21.
set Wgettemp="%temp%\Wgettemp" 
22.
if defined typ set "Typ=-A %typ%" 
23.
echo Teste Server ... 
24.
(wget --spider  %server% -nv -nd) 2>&1 |find "]" >nul &&echo Erfolgreich.||echo Serverfehler.&& echo(&& (wget --spider  %server% -nv -nd &exit /b 2)  
25.
 
26.
echo Erstelle Liste des FTP-Verzeichnisses 
27.
echo dies kann einige Minuten Dauern 
28.
echo Bitte Warten ... 
29.
 
30.
(wget --spider  %server% %typ% -r -nv -nd) 2>&1 |find "]" |find /v ".listing" >%wgettemp% 
31.
>%wgetlog% (for /f "usebackq tokens=4" %%i in (%wgettemp%) do @echo %%l) 
32.
 
33.
echo Verzeichnissliste vom Server wurde erstellt. 
34.
echo Vergleiche CSV mit Verzeichnissen. 
35.
 
36.
for /f "usebackq delims=" %%i in (%InCSVList%) do set "Line=%%i" & call :search 
37.
goto :weiter 
38.
:search 
39.
set "Line= %Line:;=; %" 
40.
for /f "tokens=1-22*delims=;" %%a in ("%Line%") do ( 
41.
  set "Name=%%b" 
42.
  set "Part1=%%a;%%b;%%c;%%d;%%e;%%f;%%g;%%h;%%i;%%j;%%k;%%l;%%m;%%n;%%o;%%p;%%q;%%r;%%s;%%t;%%u;" 
43.
  set "Part3=;%%w" 
44.
  call :write  
45.
46.
exit /b 
47.
:write 
48.
set "Name=%Name:; =;%" 
49.
set "URL=" 
50.
for /f "Delims=" %%i in ('findstr /e "\/%Name%...." %wgetlog% ') do set "URL=%%i" 
51.
setlocal enabledelayedexpansion 
52.
set "Line=!Part1!!URL!!Part2!" 
53.
set "Line=!Line:* =!" 
54.
set "Line=!Line:; =;!" 
55.
>>%OutCSVList% echo !Line! 
56.
endlocal 
57.
exit /b 
58.
:weiter 
59.
echo CSV Fertiggestellt. 
60.
exit /b 0

Gruß Phil
Bitte warten ..
Mitglied: pieh-ejdsch
29.07.2012 um 23:46 Uhr
moin,

Ich hab nochmal 2 Zeilen ausgebessert (Zeile 05 und Zeile 16)

Gruß Phil
Bitte warten ..
Mitglied: Kariya
31.07.2012, aktualisiert 07.08.2012
So ich hab das ganze nochmal getestet leider noch funktioniert das ganze noch nicht zu 100%.

Mein Quelltext sieht wie folgt aus:

01.
@echo off  
02.
setlocal  
03.
 
04.
  rem nur den Pfad zur wget.exe angeben  
05.
set "wgetPath=C:\Programme\GnuWin32\bin\"  
06.
set "Server=ftp://FTP.Server"  
07.
 
08.
 rem InklusiveListe Dateiendung Trennung mit Komma  
09.
 rem bei allen Dateien nichts angeben  
10.
set "Typ=bmp,jpg"  
11.
set InCSVList="E:\test\modified_01.csv"  
12.
set OutCSVList="E:\test\modified.csv"  
13.
type nul>%OutCSVList%  
14.
 
15.
 rem wget in Path eintragen  
16.
(echo %path:;=&echo(%)|find /i "wget.exe" >nul || set "path=%path%;%wgetpath%"  
17.
 rem prüfe ob wget gefunden 
18.
(wget) 2>&1 |findstr /n "Befehl nicht" &&echo(&&echo wget.exe nicht gefunden. Bitte Pfad angeben!&& exit /b 1  
19.
 
20.
set Wgetlog="%temp%\Wget.log"  
21.
set Wgettemp="%temp%\Wgettemp"  
22.
if defined typ set "Typ=-A %typ%"  
23.
echo Teste Server ...  
24.
 
25.
(wget --ftp_user=user --ftp-password=password --spider  %server% -nv -nd) 2>&1 |find "]" >nul &&echo  
26.
 
27.
Erfolgreich.||echo Serverfehler.&& echo(&& (wget --spider  %server% -nv -nd &exit /b 2)   
28.
 
29.
 
30.
echo Erstelle Liste des FTP-Verzeichnisses  
31.
echo dies kann einige Minuten Dauern  
32.
echo Bitte Warten ...  
33.
 
34.
(wget --spider  %server% %typ% -r -nv -nd) 2>&1 |find "]" |find /v ".listing" >%wgettemp% 
35.
>%wgetlog% (for /f "usebackq tokens=4" %%i in (%wgettemp%) do @echo %%l) 
36.
 
37.
echo Verzeichnissliste vom Server wurde erstellt.  
38.
echo Vergleiche CSV mit Verzeichnissen.  
39.
 
40.
for /f "usebackq delims=" %%i in (%InCSVList%) do set "Line=%%i" & call :search  
41.
goto :weiter  
42.
:search 
43.
set "Line= %Line:;=; %" 
44.
for /f "tokens=1-22*delims=;" %%a in ("%Line%") do (  
45.
  set "Name=%%b"  
46.
  set "Part1=%%a;%%b;%%c;%%d;%%e;%%f;%%g;%%h;%%i;%%j;%%k;%%l;%%m;%%n;%%o;%%p;%%q;%%r;%%s;%%t;%%u;"  
47.
  set "Part3=;%%w"  
48.
  call :write   
49.
)  
50.
exit /b  
51.
:write  
52.
set "Name=%Name:; =;%"  
53.
set "URL="http://www.coxx.it/pictures/""  
54.
for /f "Delims=" %%i in ('findstr /e "\/%Name%...." %wgetlog% ') do set "URL=%%i"  
55.
setlocal enabledelayedexpansion  
56.
set "Line=!Part1!!URL!!Part2!"  
57.
set "Line=!Line:* =!"  
58.
set "Line=!Line:; =;!"  
59.
>>%OutCSVList% echo !Line!  
60.
endlocal  
61.
exit /b  
62.
:weiter  
63.
echo CSV Fertiggestellt.  
64.
exit /b 0
In die modified.csv wird lediglich ein teil der ersten Zeile geschrieben.

"XTSOL";"PCS719719";"2";"0";"1";"default";"NINTENDO";"0";"132.47";"";"";"";"1";"1";"";"0045496443597";"0.00";"default";"0";"0";"0.0000";"http://www.coxx.it/pictures/"

danach ist leider schluss. Was mache ich Falsch bzw. was habe ich vergessen an meine Umgebung anzupassen?
Bitte warten ..
Mitglied: Kariya
08.08.2012, aktualisiert um 22:35 Uhr
Ich habe in den letzten Tagen selbst noch ein wenig probiert, bin aber leider auf keinen grünen Zweig gekommen.

01.
@echo off  
02.
setlocal  
03.
 
04.
  rem nur den Pfad zur wget.exe angeben  
05.
set "wgetPath=C:\Programme\GnuWin32\bin\"  
06.
set "Server=ftp://coxx.it"  
07.
 
08.
 rem InklusiveListe Dateiendung Trennung mit Komma  
09.
 rem bei allen Dateien nichts angeben  
10.
set "Typ=bmp,jpg"  
11.
set InCSVList="E:\test\modified_01.csv"  
12.
set OutCSVList="E:\test\modified.csv"  
13.
type nul>%OutCSVList%  
14.
 
15.
 rem wget in Path eintragen  
16.
(echo %path:;=&echo(%)|find /i "wget.exe" >nul || set "path=%path%;%wgetpath%"  
17.
 rem prüfe ob wget gefunden 
18.
(wget) 2>&1 |findstr /n "Befehl nicht" &&echo(&&echo wget.exe nicht gefunden. Bitte Pfad angeben!&& exit /b 1  
19.
 
20.
set Wgetlog="%temp%\Wget.log"  
21.
set Wgettemp="%temp%\Wgettemp"  
22.
if defined typ set "Typ=-A %typ%"  
23.
echo Teste Server ...  
24.
 
25.
(wget --ftp_user=ftpuser --ftp-password=ftppassword --spider  %server% -nv -nd) 2>&1 |find "]" >nul &&echo Erfolgreich.||echo Serverfehler.&& echo(&&  
26.
 
27.
(wget --spider  %server% -nv -nd &exit /b 2)   
28.
 
29.
echo Erstelle Liste des FTP-Verzeichnisses 
30.
echo dies kann einige Minuten Dauern 
31.
echo Bitte Warten ... 
32.
 
33.
(wget --spider  %server% %typ% -r -nv -nd) 2>&1 |find "]" |find /v ".listing" >%wgettemp% 
34.
>%wgetlog% (for /f "usebackq tokens=4" %%i in (%wgettemp%) do @echo %%l) 
35.
 
36.
echo Verzeichnissliste vom Server wurde erstellt. 
37.
echo Vergleiche CSV mit Verzeichnissen. 
38.
 
39.
for /f "usebackq delims=" %%i in (%InCSVList%) do set "Line=%%i" & call :search 
40.
goto :weiter 
41.
:search 
42.
set "Line= %Line:;=; %" 
43.
for /f "tokens=1-22*delims=;" %%a in ("%Line%") do ( 
44.
  set "Name=%%b" 
45.
  set "Part1=%%a;%%b;%%c;%%d;%%e;%%f;%%g;%%h;%%i;%%j;%%k;%%l;%%m;%%n;%%o;%%p;%%q;%%r;%%s;%%t;%%u;" 
46.
  set "Part3=;%%w" 
47.
  call :write  
48.
49.
exit /b 
50.
 
51.
:write 
52.
set "Part2=%Name:; =;%" 
53.
set "URL="http://www.coxx.it/pictures/" 
54.
for /f "Delims=" %%i in ('findstr /e "\/%Name%...." %wgetlog% ') do set "URL=%%i" 
55.
setlocal enabledelayedexpansion 
56.
set "Line=!Part1!!URL!!Part2!!Part3!" 
57.
set "Line=!Line:* =!" 
58.
set "Line=!Line:; =;!" 
59.
>>%OutCSVList% echo !Line! 
60.
endlocal 
61.
exit /b 
62.
:weiter 
63.
echo CSV Fertiggestellt. 
64.
exit /b 0
Die Ausgabedatei sieht wie folgt aus:

"XTSOL";"PCS719719";"2";"0";"1";"default";"NINTENDO";"0";"132.47";"";"";"";"1";"1";"";"0045496443597";"0.00";"default";"0";"0";"0.0000";"http://www.coxx.it/pictures/" "PCS719719";"";"";"";"";"";"";"";"";"Nintendo DSi Grundgerät schwarz";"";"Nintendo DSi Grundgerät schwarz";"";"";"";"";"";"Spielkonsolen";"";"";"";"";""


"http://www.coxx.it/pictures/" "PCS719719" müsste so aussehen: "http://www.coxx.it/pictures/PCS719719.jpg"

Und es sollte nicht nur die eine Zeile bearbeitet werden sondern die gesamte csv Datei.

Gibt es noch Tips?
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Dateien aus CSV mit Batch suchen (5)

Frage von joes1609 zum Thema Batch & Shell ...

Microsoft Office
Excell - CSV Dateien aus Ordner in eine Workmap einfügen VBA (5)

Frage von 134094 zum Thema Microsoft Office ...

Batch & Shell
gelöst Skript für: Automatisch generierte CSV Datei (3)

Frage von janelsaesser zum Thema Batch & Shell ...

VB for Applications
Einzelne daten aus verschiedenen csv dateien in eine excel zusammenfügen (4)

Frage von K1200R zum Thema VB for Applications ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Monitoring
Netzwerk-Monitoring Software (17)

Frage von Ghost108 zum Thema Monitoring ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

Windows 10
Windows 10 Ordnerfreigabe (15)

Frage von Xaero1982 zum Thema Windows 10 ...