17346
Goto Top

Daten Download mit batch und wGET!?!?!?!

Hallo,

hab mich ne zeitlang damit beschäftigt aber irgendwie komm ich net weiter...brauch sozusagen dringen nen guten tipp..


Hier das Problem...

es geht um den datenabgleich zwischen Webshop und unsrem ERP-System...

das Exportieren der daten von ERP zu Webshop funktioniert ohne Problem ich Erstell die Daten vom ERP System und lade sie mittels rsync auf den webshop und aktivire dann per wget das skript auf dem webshop um die daten dann einzulesen...

nur der umgekehrte weg funktioniert nicht wirklich...

ich muss das skript auf dem webshop aktivieren...mit wget (was funktioniert)..

nur die daten von dem webshop zu holen bekomm ich nicht hin... problem ist, dass eine menge von daten darin stehen und ich eigentlich nur die brauche die mit imp anfangen...

hat jemand ne idee wie ich das am besten hinbekomme... die imp daten sind auch alle mit nem zeitstempel versehen so dass ich diese dann auch noch richtig sortieren muss... um dann beim einlesen ins erp-system nicht irgendwo anfange sondern bei der ältesten datei...

NEED HELP!?!?!?!

Content-Key: 24960

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

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: maneich
maneich 01.02.2006 um 14:16:37 Uhr
Goto Top
Hallo,

so wie ich das sehe, wirst Du das mit einer Batch allein nicht hinbekommen.

Arbeitest Du mit WGET unter Windows oder Linux?

Für das runterholen benötigst Du auf jeden Fall eine feste URL, wo die Daten abgeholt werden können.

Wenn du mit Denem Script alle Daten einsammeln kannst. könntest du ja auch über dieses Script z.B. ein VBS starten, das nur die relevanten Daten (imp..) aussortiert und diese danach auch noch sortiert.

Danach diese Daten speichert und Rückmeldung zum abholen gibt.

Das ist natürlich nur ein grober Umriss, sollte aber realisierbar sein.

http://www.pro-linux.de/berichte/wget-doku.html
Hier sind am Ende der Seite auch einige Erweiterungen von wget angezeigt, vielleich helfen einige oder eines davon weiter.

MfG maneich
Mitglied: 17346
17346 01.02.2006 um 14:21:02 Uhr
Goto Top
hm...

leider windows..face-smile

also die feste url hab ich ja wo ich einmal das skript anwerfe..was die daten aus dem webshop exportiert..und den ort habe auch wo die daten abgelagert werden..

mein problem ist wahrscheinlich nur wie ich nach und anch die timestamps aus dem dateinamen entferne und nur die imp daten finde..

ich schau mir mal kurz den dokulink an...
Mitglied: maneich
maneich 01.02.2006 um 14:50:18 Uhr
Goto Top
Hallo,

nun das ist doch schon mal etwas.

Also ich würde Dir vorschlagen das ganze runterzuladen und danach verarbeiten. Am einfachsten geht das dann mit VBS:

s2 = "URL" ' hier die genaue URL eintragen
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
Call objHTTP.Open("GET", s2, FALSE)
objHTTP.Send
dat = Split(objHTTP.ResponseText, vbCrLf)


Damit hast Du in dat den Inhalt der Seite in Zeilen aufbereitet stehen und mit:

For Each da in dat
x = InStr(da, "imp")
If 0 < x Then
dat1 = dat1 & vbCrLf & da
End If
Next

Damit sortiest Du alle Datensätze aus die "imp" beinhalten.
Kommt "imp" nur am Zeilenanfang vor, kannst du das noch genauer machen mit:

x = InStr(left(da, 3), "imp")

Für das sortieren der Datensätze ist wichtig zu wissen ob Erstellungsdatum oder Datum letzte Änderung genommen werden soll.

Du solltest schon mal einige DatenSätze hier reinstellen, damit man sich einen Überblick verschaffen kann. Sortieren nach bestimmten Kriterien ist nicht so einfach.

MfG maneich
Mitglied: 17346
17346 02.02.2006 um 11:34:49 Uhr
Goto Top
sorry,

ich glaube ich hab mich da vielleicht etwas falsch ausgedrückt...

die datensätze ansicht sind kein problem es geht um die dateinamen....

sprich wird es eine liste von dateien geben die ungefähr so ausschaut..

imp_best_pos_20060105121314.csv --> davon mehr als eine...

&

import_best_kunden_20060105121314.csv


mein problem ist..das ich erst den timestamp eliminieren muss, dabei aber aufpassen muss dass ich die datei nach dem umbennen verschiebe..dann einlese und dann mir die nächste datei vornehme...

leider reichen heirzu meine programmier kenntnisse im bezug auf VB oder batch-dateien nicht aus um mir was vernünftiges zu basteln...
Mitglied: maneich
maneich 02.02.2006 um 19:15:28 Uhr
Goto Top
Hallo,

damit sollte es klappen.

Über Laufwerk/Netzlaufwerk alter & neuer Standort kann ich Dir ohne Aussagen so nicht helfen.

Die Liste (Listname muß in der Klammer angegeben werden) am besten im Verzeichnis der Ursprungsdateien ablegen und auch das Script in diesem Verzeichnis laufen lassen.

@echo off
cls
for /f "tokens=1,2,3,4 delims=_" %%i in (liste.txt) do call:loop %%i %%j %%k %%l

:loop
set y=%1
If not %y:~1,3%==imp goto end
set y=%4
set nam=%1_%2_%3_%y:~7%
move /y %1_%2_%3_%4 neuerStandort\%nam%>nul
:end

goto eof

MfG maneich
Mitglied: Biber
Biber 02.02.2006 um 19:33:47 Uhr
Goto Top
Na, maneich,
ich glaube eher, dass die Anforderung so zu interpretieren ist, dass die Dateien (imp_best_pos%timestamp%.csv und imp_best_kunden_%timestamp%.csv)
- erst alle mit wget zu holen sind
- diese dann einzeln (älteste zuerst) umbenannt werden müssen in imp_best_pos.csv und imp_best_kunden.csv
- einzeln per "LiesmirEin.exe imp_best_kunden.csv" bzw. "LiesmirEin.exe imp_best_post.csv" eingelesen werden sollen.
- danach vielleicht irgendwohin geMOVED werden.

Wir sollten erst noch mal die Spezifikation abwarten.
Gruß biber

P.S. Bei Deinem Batch fehlt ein "goto :eof" nach der FOR..IN.DO_Anweisung.
Mitglied: maneich
maneich 02.02.2006 um 20:37:11 Uhr
Goto Top
Hallo Biber,

wenn Du hier meinen ersten Thread gelesen hast, solltest Du eigentlich mitbekommen haben, daß ich auch der Meinung war/bin erst mal alles runterzuholen.

Eine Antwort kann nur so gut sein wie die Anfrage und mit Glauben kann man nicht programmieren.

Na ja, dann wird eben delims noch um den Punkt erweitert "delims=_. " und "token=1,2,3,4,5" und es wird noch %%m an loop übergeben und %4 wird in loop wird ignoriert.

Das mit dem "LiesmirEin.exe" verstehe ich nicht. Windows und ganz besonders ab W2K ist so mächtig, daß man fast keine Fremdtools benötigt. Man muß sich eben damit befassen.

Das goto eof sollte so auch klappen, wenn mindestens 1 Leerzeile dazwischen liegt. Aber sicher hast Du recht, daß es unter der for-Zeile besser aufgehoben ist


MfG maneich
Mitglied: 17346
17346 03.02.2006 um 08:12:53 Uhr
Goto Top
Morgen,

danke erstmal das hier so sehr über mein Problem philosophiert wird.. face-smile

so nun noch ein paar infos mehr..

also mittlerweile hab ich es hinbekommen nur die ausgewählten daten zu downloaden..

sprich ich lade derzeit nur die daten runter die mit "imp" anfangen..

die spezifikation von biber bringt es auf den punkt...

trifft da der programmcode von meineich noch zu???
Mitglied: maneich
maneich 03.02.2006 um 11:31:51 Uhr
Goto Top
Hallo,

dann mußt Du den Code eben, wie in meinem lezten Thread erwähnt, etwas erweitern

Wenn Du bei delims=_. noch den Punkt dazu setzst, lierfert Dir die for-Zeile z.B.

imp best pos 20060105121314 csv

also 5 Positionen, wo ist dann auch tokens=1,2,3,4,5.

Alle Positionen benötigst Du für die ursprüngliche Datei und für den neuen Namen Pos. 1,2,3,5

Also:

@echo off
cls
for /f "tokens=1,2,3,4,5 delims=_." %%i in (liste.txt) do call:loop %%i %%j %%k %%l %%m
goto eof

:loop
set y=%1
If not %y:~1,3%==imp goto end
move /y %1_%2_%3_%4.%5 neuerStandort\%1_%2_%3.%5>nul
oder für rename
ren %1_%2_%3_%4.%5 %1_%2_%3.%5>nul
:end

Wenn Du in der Liste bereits nur die Dateien mit "imp" stehen hast, genügt nur die for-Zeile

for /f "tokens=1,2,3,4,5 delims=_." %%i in (liste.txt) do move /y Verzeichnis\%%i_%%j_%%k_%%l.%%m Verzeichnis\%%i_%%j_%%k.%%m>nul

für move oder bei rename

for /f "tokens=1,2,3,4,5 delims=_." %%i in (liste.txt) do ren Verzeichnis\%%i_%%j_%%k_%%l.%%m %%i_%%j_%%k.%%m>nul


MfG maneich
Mitglied: 17346
17346 03.02.2006 um 14:11:10 Uhr
Goto Top
danke erstmal, das sieht schon ganz gut aus, hab nur eine frage..was meint ihr mit listen???

meint ihr damit das verzeichniss wo die ganzen imp* datein drin stehen oder was???

mfg

martin..
Mitglied: Biber
Biber 03.02.2006 um 19:15:15 Uhr
Goto Top
Moin Martin,

das wird langsam ein bisschen schwierig, weil Kollege maneich und ich Deine Anforderung vollkommen unterschiedlich verstehen und dementsprechend vollkommen unterschiedliche Lösungswege vor Augen haben.

Deshalb noch mal von mir die Frage:
Ich habe es so verstanden, dass die imp_best_kunden*bla- und imp_best_best_pos_bla-Dateien einzeln eingelesen werden müssen von irgendeinem Tool "LiesMirEin.exe", das das zwar kann, aber immer den feststehenden Namen "imp_best_kunden.* OHNE die Timestamp-Extension braucht.

Wenn dem so ist, komme ich mit ein paar Zeilen weniger aus als maneich - bin aber nicht sicher, wie genau denn Deine Anforderung ist.

Mit Weg wäre :
::--BatchskizzeBiber.bat
@echo off
Wget.....(alle imp_best*.csv ins Verzeichnis D:\ownload)
for /f %%i in ('dir /od /b D:\ownload\imp_best_pos*.csv') do call:loop IMP_BEST_POS.csv %%~dpni
for /f %%i in ('dir /od /b D:\ownload\imp_best_kunden*.csv') do call:loop IMP_BEST_KUNDEN.csv %%~dpni
goto :eof

:loop
Copy /y %2 c:\wodasEinlesenIst\%1
c:\wodasEinlesenIst\LiesMirEin %1
Move %2 S:\SaveDisk\MyImpBackups\*.*
goto :eof
::--BatchskizzeBiber.bat

Die Pfade und den Namen von der "LiesmirEin.exe" solltest Du natürlich ersetzen.
So habe ich die Mimik verstanden.

Gruß Biber
Mitglied: maneich
maneich 03.02.2006 um 20:01:47 Uhr
Goto Top
Hallo,

ich erinnere an Deinen Thread vom 2.2.06:

ich glaube ich hab mich da vielleicht etwas falsch ausgedrückt...
die datensätze ansicht sind kein problem es geht um die dateinamen....
sprich wird es eine liste von dateien geben die ungefähr so ausschaut..
------
imp_best_pos_20060105121314.csv --> davon mehr als eine...
&
import_best_kunden_20060105121314.csv

Also ging ich davon aus, daß alle Dateien in einer Liste stehen, die Du dann abarbeiten willst. Ist dem nicht so mußt du natürlich mit "dir" arbeiten, wie von Biber angezeigt.

Das Problem ist eben, daß bei Deinen Ausführungen div. Interpretationen möglich sind.

Na ja mal sehen.

MfG maneich