speedy-gonzales
Goto Top

CSV Datei per batch herunterladen, automatisch bearbeiten und abspeichern, danach in dB importieren

Hallo zusammen,

ich bin leider keine Profi auf dem Gebit und habe mich mittlerweile dank etlicher Foren sehr weit an meine Problemlösung herangetastet.

Nun hoffe ich auf eure Hilfe:
Bin über folgenden Thread auf dieses Forum aufmerksam geworden, denke darauf kann man aufbauen: CSV Datei automatisch bearbeiten und abspeichern

Mein Problem:

Ich lade eine CSV Datei von unserem Lieferanten per batch-Datei herunter, in dieser CSV Datei sind die Artikelnummer|Lagerbestände hinterlegt.

Der Hersteller bietet jedoch nur folgende 3 Bestände an, die ich so nicht in meinen Warenwirtschaft importieren kann:
-1 Artikel ausverkauft, kommt auch nicht mehr rein
0 Artikel im Zulauf
1 Artikel an Lager

Nun müsste ich nach dem Download der Datei diese umschreiben von:

-1 auf 99
0 bleibt 0
1 zu 50

und die Datei danach automatisch abspeichern, sodass die weiteren Befehle in der Batch diese neu abgespeicherte Datei dann in die DB der Warenwirtschaft importieren kann.

Anbei mal meine aktuelle Batch Datei:

@echo off
cd\
C:
cd Batch-Lieferanten\123
"C:\Program Files (x86)\GnuWin32\bin\wget.exe" -N http://Datei/verfuegbarkeit.csv
"C:\Program Files (x86)\XXX\XXXX.exe" --server=XXXXX\YYYYY --database=yBUSINESS --dbuser=fsd --dbpass=xxxxxxx --templateid=IMP6 --inputfile=verfuegbarkeit.csv
exit


Gibt es hier eine Möglichkeit diese Batch Datei passend umzuschreiben oder eine Powershell oder ähnliches dazwischen zu schalten? Hier bin ich mit meinem Latein komplett am Ende und wäre für jede Hilfe dankbar!

Gruß
Holger

Content-Key: 386107

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: 137084
Lösung 137084 11.09.2018, aktualisiert am 12.09.2018 um 16:14:13 Uhr
Goto Top
@echo off
chcp 1252
cd /d "c:\Batch-Lieferanten\123"  
"C:\Program Files (x86)\GnuWin32\bin\wget.exe" -N http://Datei/verfuegbarkeit.csv  
Powershell -Executionpolicy ByPass -NoProfile -Command "(Import-Csv '.\verfuegbarkeit.csv' -delimiter ';') | %%{$_.Lagerbestände = @{'-1'=99;'0'=0;'1'=50}[($_.Lagerbestände)];$_} | export-csv '.\verfuegbarkeit.csv' -delimiter ';'"  
"C:\Program Files (x86)\XXX\XXXX.exe" --server=XXXXX\YYYYY --database=yBUSINESS --dbuser=fsd --dbpass=xxxxxxx --templateid=IMP6 --inputfile=verfuegbarkeit.csv  
exit
Mitglied: speedy-gonzales
speedy-gonzales 12.09.2018 um 16:08:03 Uhr
Goto Top
Wahnsinn, vielen Dank für die schnelle Rückmeldung, damit hätte ich nicht gerechnet! Die Powershell scheint generell zu funktionieren, jedoch bekomme ich noch eine Fehlermeldung:

Die Zeichenfolge hat kein Abschlusszeichen: '.
+ CategoryInfo : ParserError: (face-smile , ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

So habe ich die Zeile aktuell eingepflegt und an die Pfade angepasst:

Powershell -Executionpolicy ByPass -NoProfile -Command "(Import-Csv '.Batch-Lieferanten\123\verfuegbarkeit.csv' -delimiter ';') | %%{$_.Verfuegbarkeit = @{'-1'=99;'0'=0;'1'=50}[($_.Verfuegbarkeit)];$_} | export-csv '.Batch-Lieferanten\123\verfuegbarkeit.csv -delimiter ';'"

Wäre super wenn Du hier nochmal drüber schauen könntest, meiner Meinung nach ist doch zum Abschluss das " das Abschlusszeichen, oder?
Mitglied: 137084
137084 12.09.2018 aktualisiert um 16:15:11 Uhr
Goto Top
Hatte ein Hochkomma vergessen, ist korrigiert.
Mitglied: speedy-gonzales
speedy-gonzales 12.09.2018 um 16:24:52 Uhr
Goto Top
You made my Day! Du bist ein wahrer Held! Vielen vielen Dank, du hast einen Menschen heute seeeeeeeeeehr glücklich gemacht! Problem mit Erfolg gelöst!
Mitglied: 137084
137084 12.09.2018 um 16:25:58 Uhr
Goto Top
Kein Thema wenn's hilft face-smile.
Mitglied: speedy-gonzales
speedy-gonzales 12.09.2018 um 16:39:43 Uhr
Goto Top
Wollte dies nun duplizieren auf einen anderen Lieferanten, bei dem habe ich aber ein Problem mit dem Zertifikat wie es scheint, vielleicht hast Du hier auch noch einen Tipp wenn ich das nochmal ausnutzen darf.

SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
--2018-09-12 16:34:08-- https://www.abc.com/backend/export/index/mvg_bestaende.csv?feedID=29& ...
Auflösen des Hostnamen »www.abc.com«.... 35.157.231.155
Verbindungsaufbau zu www.abc.com|35.157.231.155|:443... verbunden.
WARNUNG: Kann das Zertifikat von »www.abc.com« nicht prüfen, ausgestellt von »/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3«:.
Die Authorität des Ausstellers des Zertifikates kann lokal nicht geprüft werden.
WARNUNG: Der Common Name »123.shop« des Zertifikates entspricht nicht dem angeforderten Hostname »www.abc.com«.
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Länge: nicht spezifiziert [text/x-comma-separated-values]
»Last-modified«-Kopfzeile fehlt -- Zeitstempel abgeschaltet.
--2018-09-12 16:34:14-- https://www.abc.com/backend/export/index/mvg_bestaende.csv?feedID=29& ...
Verbindungsaufbau zu www.abc.com|35.157.231.155|:443... verbunden.
WARNUNG: Kann das Zertifikat von »www.abc.com« nicht prüfen, ausgestellt von »/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3«:.
Die Authorität des Ausstellers des Zertifikates kann lokal nicht geprüft werden.
WARNUNG: Der Common Name »123« des Zertifikates entspricht nicht dem angeforderten Hostname »www.abc.com«.
HTTP Anforderung gesendet, warte auf Antwort...


Selbst wenn ich den Link zu dem Feed, welcher die CSV Datei erstellt auf den 123.shop setze bringt er mir eine Zertifikatswarnung.

Nun dachte ich, verzichten wir auf das Zertifikat und habe folgenden wget AUfruf erstellt:

"C:\Program Files (x86)\GnuWin32\bin\wget.exe" -N --no-check-certificate "https://www.abc.com/backend/export/index/mvg_bestaende.csv?feedID=29&hash=5da853b5a8234b31a5cdda3912adddbe"

Aber scheinbar reagiert er wauf das --no-check-certificate nicht, was habe ich da falsch gemacht?
Mitglied: 137084
137084 12.09.2018 aktualisiert um 16:50:57 Uhr
Goto Top
Den Anbieter um die richtige Adresse bitten, oder Warnung ignorieren. Runtergeladen sollte es trotzdem.
Versteh den Mischmach sowieso nicht, machs doch gleich alles mit Powershell, dann brauchst du auch keine externen Tools wie wget mehr.
Mitglied: speedy-gonzales
speedy-gonzales 13.09.2018 um 09:24:17 Uhr
Goto Top
Danke für die Info, habe es hinbekommen, er hat die Datei heruntergeladen, jedoch mit falschem Namen.

Mischmasch ist gut, bin froh das ich das irgendwie umgesetzt bekommen habe als Laie face-smile Wie das komplett mit Powershell geht entzieht sich leider absolut meiner Kenntnis. Nun läuft es auf jeden Fall. Vielen Dank für Deine Hilfe & Zeit!