Batch Datei für Datenimport

Hallo zusammen

Ich wollte eine Batch-Datei erstellen, die automatisch das PLZ-File allCountries von der Seite “http://download.geonames.org/export/zip” downloaded, entzippt, eine Tabelle erstellt und die Daten in diese Tabelle einliest.

Das downloaden, entzippen und Tabelle erstellen funktioniert soweit.

Nur den Import bring ich nicht automatisch zu stande.
Wenn ich %PGBIN%\psql Test ausführe geht er in meine DB Test.
In der Commando Box erscheint dann: Test=>
Doch die nächste Anweisungszeile: copy test.plz (…) from ‘D:/geonames/temp/allCountries.txt’ null as ‘’;
wird nicht automatisch ausgeführt.
Manuell funktioniert das ohne Probleme.

Wie kann ich ihm sagen, dass er den nächsten Befehl/Anweisung automatisch ausführen soll?

Quellcode:

– Pfad des Daten Ordners
set STATEDIR=“D:\geonames\download.geonames.org\export”
set TMPDIR=D:\geonames\temp
set TMPDIR2=D:\geonames\

– Weitere Pfade
set UNZIPTOOL=“C:\Program Files\7-Zip\7z.exe”
set WGETTOOL=“C:\GnuWin32\bin\wget.exe”
set PGBIN=“C:\Program Files\PostgreSQL\8.4\bin”
set PGBIN2=“C:/Program Files/PostgreSQL/8.4/bin”
set PGPORT=5432
set PGHOST=localhost
set PGUSER=postgres
set PGPASSWORD=*********
set PGDATABASE=Test

– Download des Files allCountries.zip
%WGETTOOL% http://download.geonames.org/export/zip/allCountries.zip --no-parent --relative --recursive --level=2 --accept=zip,txt --mirror --reject=html
del %TMPDIR%*.* /Q

– Entzippen nach temp
cd %STATEDIR%
for /r %%z in (*.zip) do %UNZIPTOOL% e %%z -o%TMPDIR%
Pause

– Neue Tabelle geoPLZ erstellen
cd %TMPDIR2%
%PGBIN%\psql Test < create_table.sql

Pause

cd %TMPDIR2%
%PGBIN%\psql Test
copy test.plz (country_sub,PLZ,Ort,Region,Nummer,Ort2,Nummer2,Ort3,Nummer3,latitude,longitude,Wert) from ‘D:/geonames/temp/allCountries.txt’ null as ‘’;

Pause

Rufe psql mit der Option -c auf, kurze Demo:

kretschmer@tux:~$ echo "1,2,3" > data.dat
kretschmer@tux:~$ psql test -c "select * from foo"
 a | b | c
---+---+---
(0 rows)

kretschmer@tux:~$ psql -x test -c "copy foo from '/home/kretschmer/data.dat' csv"
COPY 1
kretschmer@tux:~$ psql test -c "select * from foo"
 a | b | c
---+---+---
 1 | 2 | 3
(1 row)

Das als Batchdatei umzuschreiben überlasse ich Dir zur Übung.

Andreas

Merci für die Antwort

Werde es ausprobieren…