Top-Themen

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, 2921 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
Dateien aus CSV mit Batch suchen
gelöst Frage von joes1609Batch & Shell5 Kommentare

Hallo zusammen, ich stehe gerade auf dem Schlauch. Ich habe eine CSV-Datei, in der stehen zusammengesetzt, jeweils ein kompletter ...

Microsoft Office
Excell - CSV Dateien aus Ordner in eine Workmap einfügen VBA
Frage von 134094Microsoft Office5 Kommentare

Hallo Forum, ich habe folgendes Problem: Ich habe eine Menge CSV-Dateien die ich in einer Excelltabelle darstellen will. Für ...

Batch & Shell
Per Batch eine Spalte in eine CSV Datei einfügen
gelöst Frage von mayli01Batch & Shell13 Kommentare

Hallo Forum :) Folgende Ausgangssituation. Ich habe eine CSV Artikelliste mit insgesamt 9 Spalten, einer Kopfzeile und etwa 50 ...

Batch & Shell
Ergänzen einer CSV Datei als letze Spalte mit Teil der Dateiname
Frage von moltitiBatch & Shell11 Kommentare

ich habe ca. 12000 Dateien die im Batch Betrieb ergänzt werden sollen. Der Aufbau der Dateien ist etwa so: ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 17 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 22 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 22 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows XP
Windows XP Aktivieren geht nicht
Frage von tetikmiroWindows XP13 Kommentare

Hallo Ich habe einen Windows XP mit einen vCenter Converter umgezogen auf eine ESXI. Soweit funktioniert dies auch ohne ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
gelöst Frage von prodriveNetzwerkmanagement12 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...