Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: Torsten77

Torsten77 (Level 1) - Jetzt verbinden

18.12.2007, aktualisiert 16:56 Uhr, 6263 Aufrufe, 7 Kommentare

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
Mitglied: Biber
18.12.2007 um 12:50 Uhr
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)
01.
(=12:39:21  D:\temp=) 
02.
>for /F "tokens=1,2 delims=, " %i in (Deine.csv) do @echo update products_attributes set attributes_stock='%i' where attributes_model='%j'; 
03.
update products_attributes set attributes_stock='1000' where attributes_model='550';
Im Batch dann.
01.
@echo off & setlocal 
02.
Set "updateStmt=update products_attributes set attributes_stock=" 
03.
Set "updateWhere=where attributes_model=" 
04.
Set "inCSV=x:\yz\meine.csv" 
05.
Set "outStmt=x:\xz\meineStmts.sql" 
06.
echo. >%outStmt% 
07.
for /F "tokens=1,2 delims=, " %%i in (%inCSV%) do echo %updateStmt% '%%i' %UpdateWhere% '%%j'; >>%outStmt%
Grüße
Biber
Bitte warten ..
Mitglied: Torsten77
18.12.2007 um 13:19 Uhr
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
Bitte warten ..
Mitglied: Biber
18.12.2007 um 13:37 Uhr
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
Bitte warten ..
Mitglied: Torsten77
18.12.2007 um 13:51 Uhr
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
Bitte warten ..
Mitglied: bastla
18.12.2007 um 14:39 Uhr
Hallo Torsten77!

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

Grüße
bastla
Bitte warten ..
Mitglied: Torsten77
18.12.2007 um 16:14 Uhr
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
Bitte warten ..
Mitglied: Biber
18.12.2007 um 16:56 Uhr
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:
01.
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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Ungewöhnliche Txt.Datei-Abfrage mit Batch (3)

Frage von DaTobsn zum Thema Batch & Shell ...

Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...