FTP vom zOS Host per Batch automatisieren
Textdatei zeilenweise einlesen und Teilstrings weiterverarbeiten
Hallo,
für Migrationen möchte ich den Filedownload vom guten alten z/OS Host automatisieren. Bei einigen Hostdateien kenne ich den Namen (z.B. DATA1) bei anderen jedoch nur die Dateistufe und nicht die vorhandenen DSN. Meine Batchdatei sieht derzeit so aus:
Die downprot.txt sieht dann so aus:
<-----schnipp-------
Verbindung mit ourhost hergestellt.
blabla
blabla
ftp> dir 'PROD.MIGRA.MAND1234.*'
200 Port request OK.
125 List started OK
Volume Unit Referred Ext Used Recfm Lrecl BlkSz Dsorg Dsname
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.DATA1'
PRD253 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA01A'
PRD252 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA01B'
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA03A'
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA03B'
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA17A'
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA17B'
...
<-----schnapp-------
Es gibt Dateien mit SA00 - SA99, jeweils A und B. Das SA steht im Original an Stelle 115 und 116.
Die heruntergeladene Datei soll dann %MYPFAD%\mig_%MYMAND%_sa01a.txt usw. heißen.
Wie kann ich mir aus der downprot.txt eine neue download.txt basteln?
Oder gibt es einen ganz anderen Weg?
Vielen Dank und viele Grüße
Loonie
Hallo,
für Migrationen möchte ich den Filedownload vom guten alten z/OS Host automatisieren. Bei einigen Hostdateien kenne ich den Namen (z.B. DATA1) bei anderen jedoch nur die Dateistufe und nicht die vorhandenen DSN. Meine Batchdatei sieht derzeit so aus:
set MYMAND=1234
set MYPFAD=h:\migration\%MYMAND%
set MYUSER=username
set MYPASSW=topsecre
md %MYPFAD%
cd %MYPFAD%
echo %MYUSER% > download.txt
echo %MYPASSW% >> download.txt
echo quote site sbd=(ibm-273,iso8859-1) >> download.txt
echo dir 'PROD.MIGRA.MAND%MYMAND%.*' >> download.txt
echo get 'PROD.MIGRA.MAND%MYMAND%.DATA1' %MYPFAD%\mig_%MYMAND%_data1.txt >> download.txt
echo quit >> download.txt
ftp -s:download.txt ourhost > downprot.txt
del download.txt
Die downprot.txt sieht dann so aus:
<-----schnipp-------
Verbindung mit ourhost hergestellt.
blabla
blabla
ftp> dir 'PROD.MIGRA.MAND1234.*'
200 Port request OK.
125 List started OK
Volume Unit Referred Ext Used Recfm Lrecl BlkSz Dsorg Dsname
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.DATA1'
PRD253 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA01A'
PRD252 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA01B'
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA03A'
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA03B'
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA17A'
PRD256 3390 2007/10/16 1 15 VB 3999 27998 PS 'PROD.MIGRA.MAND1234.SA17B'
...
<-----schnapp-------
Es gibt Dateien mit SA00 - SA99, jeweils A und B. Das SA steht im Original an Stelle 115 und 116.
Die heruntergeladene Datei soll dann %MYPFAD%\mig_%MYMAND%_sa01a.txt usw. heißen.
Wie kann ich mir aus der downprot.txt eine neue download.txt basteln?
Oder gibt es einen ganz anderen Weg?
Vielen Dank und viele Grüße
Loonie
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71486
Url: https://administrator.de/contentid/71486
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
4 Kommentare
Neuester Kommentar
Moin Loonie,
willkommen im Forum.
Wenn Der DIR-Output in der Datei Downprot.txt so aussieht wie gepostet, dann solltest Du die einzelnen Member mit folgender (Test-) Zeile am CMD-Prompt rausfieseln können:
Wenn Du das überprüft hast, dann kannst Du diese Zeile sinngemäß in einer Batchdatei verwenden und dort mit...
Diese Datei Download2.txt kannst Du als neue Input-Datei nehmen (denke ich).
[ungetestete Skizze, da ich keinen z/OS-Server unterm Tisch habe]
Grüße
Biber
willkommen im Forum.
Wenn Der DIR-Output in der Datei Downprot.txt so aussieht wie gepostet, dann solltest Du die einzelnen Member mit folgender (Test-) Zeile am CMD-Prompt rausfieseln können:
for /f "tokens=2 delims='" %i in ( 'findstr" "downprod.txt"') do @echo %i
PROD.MIGRA.MAND1234.DATA1
PROD.MIGRA.MAND1234.SA01A
PROD.MIGRA.MAND1234.SA01B
PROD.MIGRA.MAND1234.SA03A
PROD.MIGRA.MAND1234.SA03B
PROD.MIGRA.MAND1234.SA17A
PROD.MIGRA.MAND1234.SA17B
....
for /f "tokens=2 delims='" %%i in ( 'findstr" "downprod.txt"') do (
@for /f "tokens=1-4 delims=." %%a in ("%%i") do (
REM %a.%b.%c.%d entsppicht ganzem Namen (Pointer+Dataset)
Echo get ' %i' %Mypfad%\mig_%%c_%%d_data1.txt >>download2.txt
))
Diese Datei Download2.txt kannst Du als neue Input-Datei nehmen (denke ich).
[ungetestete Skizze, da ich keinen z/OS-Server unterm Tisch habe]
Grüße
Biber
Moin Loonie,
war ein Scherz - natürlich habe ich auch ein paar z/OS-Büchsen hier im Park....
Also- wenn Du die Einschränkung auf die "richtigen" Datasets schon auf dem Host gemacht hast und somit ALLE Zeilen der Download.txt verwertet werden können, dann kannst Du folgende Simulation am CMD-Prompt GEFAHRLOS nachturnen:
[Nur die erste Zeile, gekennzeichnet durch das ">"-zeichen wurde eingegeben, der Rest ist Output.]
Fir FOR/F -Anweisung zerlegt jede Zeile in der Input-Datei "downprot.txt" in einzelne Token und zwar immer dort, wo die definierten Delimiter "'" oder "." auftreten.
Somit besteht jede Zeile nur noch aus 4 Tokens (%a, %b, %c, %d), die im @echo-teil wieder passend zusammengestoppelt werden.
Spiel ein bisschen mit dieser Echo-Zeile am CMD-Prompt herum - hilft Dir mehr, als wenn ich Dir jetzt eine Zeichnung mache.
Wenn Du diese (sinngemäße) Zeile in einem Batch verwenden willst, musst Du jeweils statt einem %-Zeichen deren zwo eintippseln.
Also %%a statt %a, %%b statt b usw.
Gruß und saludos
Castor
war ein Scherz - natürlich habe ich auch ein paar z/OS-Büchsen hier im Park....
Also- wenn Du die Einschränkung auf die "richtigen" Datasets schon auf dem Host gemacht hast und somit ALLE Zeilen der Download.txt verwertet werden können, dann kannst Du folgende Simulation am CMD-Prompt GEFAHRLOS nachturnen:
>for /f "tokens=1-4 delims='." %a in (downprot.txt) do @echo get '%a.%b.%c.%d' mypfad\mig_%c_%d_data1.txt
get 'PROD.MIGRA.MAND1234.DATA1' mypfad\mig_MAND1234_DATA1_data1.txt
get 'PROD.MIGRA.MAND1234.SA01A' mypfad\mig_MAND1234_SA01A_data1.txt
get 'PROD.MIGRA.MAND1234.SA01B' mypfad\mig_MAND1234_SA01B_data1.txt
get 'PROD.MIGRA.MAND1234.SA03A' mypfad\mig_MAND1234_SA03A_data1.txt
get 'PROD.MIGRA.MAND1234.SA03B' mypfad\mig_MAND1234_SA03B_data1.txt
get 'PROD.MIGRA.MAND1234.SA17A' mypfad\mig_MAND1234_SA17A_data1.txt
get 'PROD.MIGRA.MAND1234.SA17B' mypfad\mig_MAND1234_SA17B_data1.txt
Fir FOR/F -Anweisung zerlegt jede Zeile in der Input-Datei "downprot.txt" in einzelne Token und zwar immer dort, wo die definierten Delimiter "'" oder "." auftreten.
Somit besteht jede Zeile nur noch aus 4 Tokens (%a, %b, %c, %d), die im @echo-teil wieder passend zusammengestoppelt werden.
Spiel ein bisschen mit dieser Echo-Zeile am CMD-Prompt herum - hilft Dir mehr, als wenn ich Dir jetzt eine Zeichnung mache.
Wenn Du diese (sinngemäße) Zeile in einem Batch verwenden willst, musst Du jeweils statt einem %-Zeichen deren zwo eintippseln.
Also %%a statt %a, %%b statt b usw.
Gruß und saludos
Castor