torsten77
Goto Top

inhalt einer txt-datei ergänzen und als .sql abspeichern per batch

Hallo zusammen,

ich betreue einen Internetshop in dem Lagerbestände regelmäßig aktualisiert werden sollen.

Hierzu wird von unserem Warenwirtschaftssystem eine txt-Datei (oder csv-Datei) erstellt, in der untereinander jeweils Artikel-Nr. und Lagerbestand stehen.

Artikel, Lagerbestand

1000, 550

Diese Lagerbestände möchte ich per Batch in eine .sql-Datei umwandeln und um entsprechenden SQL-Befehle ergänzen, die dann auf den Webserver hochgeladen wird.

Die SQL sieht so aus:

update products_attributes set attributes_stock='550' where attributes_model='1000'


Davon gibt es ca. 130 Zeilen / Artikel.

Um die fertige sql-Datei per FTP hochzuladen hab ich was

  1. 1. Verbindung zum FTP Server öffnen
open ftp.server.de
  1. 2. Benutzer (myaccount ) FTP Server mitteilen
user myaccount
  1. 3. Kennwort (juhu) zum Benutzer FTP Server mitteilen
pass juhu
  1. 4. Ins Verzeichnis (shop/lager) auf dem FTP Server wechseln
cd shop/lager
  1. 5. Alte Datei (file) löschen
del file
  1. Datei (file) aus dem aktuellen lokalen Verzeichnis an den FTP Server übertragen
put file
  1. Verbindung zum FTP Server und FTP beenden
bye

Das ganze soll/wird über die geplanten Tasks unter Windows auf dem Server um 3:00 Uhr morgens ausgeführt ausgeführt.

Da ich nicht besonders Bewandert im programmieren bin, wende ich mich an Euch. Soll heißen, ich benötige eine Anleitung für DAU´s.

Vielen Dank für Eure Hilfe.

Gruß

Torsten

Content-Key: 76248

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: Biber
Biber 18.12.2007 um 12:50:47 Uhr
Goto Top
Moin Torsten77,

die wesentliche Zeile, um von dem *.csv-Format zu den ausführlichen Update-Statements zu kommen, wäre am CMD-Prompt (Test Ein- und Ausgabe)
(=12:39:21  D:\temp=)
>for /F "tokens=1,2 delims=, " %i in (Deine.csv) do @echo update products_attributes set attributes_stock='%i' where attributes_model='%j';  
update products_attributes set attributes_stock='1000' where attributes_model='550';  

Im Batch dann.
@echo off & setlocal
Set "updateStmt=update products_attributes set attributes_stock="  
Set "updateWhere=where attributes_model="  
Set "inCSV=x:\yz\meine.csv"  
Set "outStmt=x:\xz\meineStmts.sql"  
echo. >%outStmt%
for /F "tokens=1,2 delims=, " %%i in (%inCSV%) do echo %updateStmt% '%%i' %UpdateWhere% '%%j'; >>%outStmt%  

Grüße
Biber
Mitglied: Torsten77
Torsten77 18.12.2007 um 13:19:29 Uhr
Goto Top
Echt super, vielen Dank für Deine schnelle und gut beschriebene Hilfe.

Das einzige was noch nicht ganz passt; in der Ausgabedatei habe ich noch eine Leerzeile ganz oben. Bekommt man die auch noch weg?

Vielen dank, mit so einer schnellen und guten Anwort hatte ich nicht gerechnet.

Gruß

Torsten
Mitglied: Biber
Biber 18.12.2007 um 13:37:49 Uhr
Goto Top
Moin Torsten77,

mein Fehler - ein Leerzeichen zuviel.

In der Batchdatei
Streiche:
echo. >%outStmt%
Setze:
echo.>%outStmt%
Ich wollte ja nur eine "leere" Datei sicherstellen, alternativ ginge auch ein
if exist "%outStmt% del %outstmt%

Falls in der Quelldatei, der xxx.CSV noch überflüssige Kopfzeilen sein sollten, dann kannst Du die mit "skip=Zeilenzahl" überspringen.
for /F "tokens=1,2 delims=, " %%i ..........(jetzt)
for /F "skip=1 tokens=1,2 delims=, " %%i ..........( neu, wenn eine Zeile übersprungen werden soll)

Wenn es läuft, dann mach einen Haken dran bitte.

Grüße
Biber
Mitglied: Torsten77
Torsten77 18.12.2007 um 13:51:22 Uhr
Goto Top
Hallo Biber,

das hat das (von mir nicht erwähnte) Leerzeichen in der Leerzeile entfernt, sorry. Die Zeile ist aber noch immer da.

Versteckte Kopfzeilen etc. sind nicht vorhanden. Wenn ich den entsprechenden Vorschlag von Dir einbinde, wird der 1. Datensatz entfernt. Das ist es also nicht.

Vielen Dank für Deine Hilfe.

Gruß

Torsten
Mitglied: bastla
bastla 18.12.2007 um 14:39:12 Uhr
Goto Top
Hallo Torsten77!

Hast Du auch die andere von Biber beschriebene Möglichkeit, also
if exist %outStmt% del %outStmt%
als Ersatz für die Zeile
echo.>%outStmt%
versucht?

Grüße
bastla
Mitglied: Torsten77
Torsten77 18.12.2007 um 16:14:25 Uhr
Goto Top
Ja hatte ich. Allerdings hat mein Editor die Groß-/Kleinschreibung verändert. Dadurch wurde die Zeile offensichtlich übersprungen, und die Daten immer wieder zusätzlich hintendran gehangen. Aber das Problem ist jetzt gelöst.

Vielen Dank.

Gruß

Torsten
Mitglied: Biber
Biber 18.12.2007 um 16:56:19 Uhr
Goto Top
Danke @bastla,

ein sorry @Torsten77.

Hätte fairerweise erwähnen sollen, dass meine Skizzen ungetestet runtergetipselt sind und eigentlich immer mindestens einen Tipp- und manchmal auch Denkfehler enthalten.

Du, Torsten77 und Dein Editor, ihr seid beide absolut schuldlos.

Hier ist der Tippfehler aus meinem letzten Kommentar:
if exist "%outStmt% del %outstmt%

Auch bekannt als Error 0x666 ( "Unpaarige und deshalb in die Grütze gehende Anzahl Anführungszeichen").
Schwamm drüber.

Der Denkfehler aus dem Kommentar vorher:
Mit "echo?>datei.xyz" erzeuge ich natürlich KEINE 0-Byte-Datei.
Sondern eine mit 2 Byte Länge. Oder Breite. Egal. Größe also.
Denn bei der "Echo"-Ausgabe wird ja immer ein CRLF, ein Zeilenvorschub gratis mitgeliefert.

Aber aus meinem Nähkästchen noch mal ein Einzeiler, der wirklich eine 0-Byte-Datei erzeugt:
echo Aber aus meinem Nähkästchen noch mal ein Einzeiler, der wirklich eine 0-Byte-Datei erzeugt >nul 2>Nullkomma.nix
In der Datei Nullkomma.nix sind dann wirklich getestete 0 Zeichen.

Grüße
Biber