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
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
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. Verbindung zum FTP Server öffnen
- 2. Benutzer (myaccount ) FTP Server mitteilen
- 3. Kennwort (juhu) zum Benutzer FTP Server mitteilen
- 4. Ins Verzeichnis (shop/lager) auf dem FTP Server wechseln
- 5. Alte Datei (file) löschen
- Datei (file) aus dem aktuellen lokalen Verzeichnis an den FTP Server übertragen
- Verbindung zum FTP Server und FTP beenden
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 76248
Url: https://administrator.de/forum/inhalt-einer-txt-datei-ergaenzen-und-als-sql-abspeichern-per-batch-76248.html
Ausgedruckt am: 28.04.2025 um 20:04 Uhr
7 Kommentare
Neuester Kommentar
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)
Im Batch dann.
Grüße
Biber
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
Moin Torsten77,
mein Fehler - ein Leerzeichen zuviel.
In der Batchdatei
Streiche:
Falls in der Quelldatei, der xxx.CSV noch überflüssige Kopfzeilen sein sollten, dann kannst Du die mit "skip=Zeilenzahl" überspringen.
Wenn es läuft, dann mach einen Haken dran bitte.
Grüße
Biber
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 einif 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)
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
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:
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:
In der Datei Nullkomma.nix sind dann wirklich getestete 0 Zeichen.
Grüße
Biber
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
Grüße
Biber