View Full Version : Datei kopieren AS400 nach AS4001
Franz Karl
23-07-12, 10:34
Hallo,
wie lautete der Befehl wenn ich genau 1 Datei von einer AS400 auf eine andere AS400 kopieren möchte ?
Danke für die Hilfe
ich würd es mit FTP machen
Wenn eine AS400 in China steht und es keine Verbindung zu der anderen gibt ist savobj auch ne Möglichkeit :)
Oder ein ddm-File verwenden und cpyf nehmen
oder ...
Der ILEMax
(mitten im Sommerloch)
Franz Karl
23-07-12, 11:02
Hallo,
danke für die Info - die Maschinen sind verbunden.
na dann
crtddmf und cpyf
oder 'schiebe-modus'
fpt 'i.p.der.as400'
user
passwort
bin
namefmt 1
put /qsys.lib/deinelib.lib/datei.file
/qsys.lib/deineziellib.lib/datei.file
bzw. 'holemodus'
get stat put, und die pfade natürlich umdrehen
der ILEMax
Hallo,
vielleicht geht ja auch der SNDNETF Command
Gruß
Michael
Franz Karl
23-07-12, 12:23
Frage zu dem FTP Befehl
Bis zum bin ging 's ja
1. namefmt 1 --> ungültiger Befehl
Dann ist wohl die AS400 defekt, bei uns geht das 100 fach am Tag.
ob es da eine 'einstellschraube' gibt kann ich nicht sagen
der ILEMax
Franz Karl
23-07-12, 13:43
Ok hat doch geklappt. Ich dachte ich müsste den FTP auf einer PC-DOS Box ausführen.
Danke dir
es gibt auch noch diese Möglichkeit:
Command (*CMD) erstellen, zB FTS
CMD PROMPT('File Transfer Support')
PARM KWD(FROMFILE) TYPE(FRF) +
MIN(1) PROMPT('von Datei')
FRF: QUAL TYPE(*NAME) LEN(10) MIN(1)
QUAL TYPE(*NAME) LEN(10) EXPR(*YES) +
DFT(*LIBL) SPCVAL((*LIBL)) PROMPT('Bibliothek')
PARM KWD(TOFILE) TYPE(TOF) +
MIN(1) PROMPT('nach Datei')
TOF: QUAL TYPE(*NAME) LEN(10) MIN(1)
QUAL TYPE(*NAME) LEN(10) EXPR(*YES) +
DFT(*LIBL) SPCVAL((*LIBL)) PROMPT('Bibliothek')
PARM KWD(RMTLOCNAM) TYPE(*NAME) LEN(8) MIN(1) +
EXPR(*YES) PROMPT('ferner Standort System')
PARM KWD(PASSWORD) TYPE(*NAME) LEN(10) MIN(1) +
EXPR(*YES) DSPINPUT(*NO) PROMPT('Kennwort +
für fernen Standort')
PARM KWD(FROMMBR) TYPE(*NAME) LEN(10) +
DFT(*FROMFILE) SPCVAL((*FROMFILE)) +
PROMPT('von Teildatei')
PARM KWD(TOMBR) TYPE(*NAME) LEN(10) +
DFT(*TOFILE) SPCVAL((*TOFILE)) +
PROMPT('nach Teildatei')
PARM KWD(MBROPT) TYPE(*CHAR) LEN(1) RSTD(*YES) +
DFT(N) SPCVAL((N N) (Y Y)) MIN(0) +
ALWUNPRT(*NO) ALWVAR(*NO) FULL(*YES) +
EXPR(*YES) PROMPT('nach Teildatei ersetzen (Y/N)')
PARM KWD(OPTION) TYPE(*CHAR) LEN(1) RSTD(*YES) +
DFT(S) SPCVAL((S S) (R R)) MIN(0) +
ALWUNPRT(*NO) ALWVAR(*NO) FULL(*YES) +
EXPR(*YES) PROMPT('Senden = S / +
Empfangen = R')
dann ein CL-Programm erstellen (*PGM)
PGM PARM(&FROMFILEF &TOFILEF &RMTLOCNAM &PASSWORD +
&FROMMBR &TOMBR &MBROPT +
&OPTION)
DCL VAR(&OPTION) TYPE(*CHAR) LEN(1)
DCL VAR(&MBROPT) TYPE(*CHAR) LEN(1)
DCL VAR(&FROMFILEF) TYPE(*CHAR) LEN(20)
DCL VAR(&FROMFILE) TYPE(*CHAR) LEN(10)
DCL VAR(&FROMLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&FROMMBR) TYPE(*CHAR) LEN(10)
DCL VAR(&TOFILEF) TYPE(*CHAR) LEN(20)
DCL VAR(&TOFILE) TYPE(*CHAR) LEN(10)
DCL VAR(&TOLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&TOMBR) TYPE(*CHAR) LEN(10)
DCL VAR(&TOMBR) TYPE(*CHAR) LEN(10)
DCL VAR(&RMTLOCNAM) TYPE(*CHAR) LEN(10)
DCL VAR(&PASSWORD) TYPE(*CHAR) LEN(10)
DCL VAR(&RC) TYPE(*CHAR) LEN(1)
DCL VAR(&MSGNUM) TYPE(*CHAR) LEN(8)
DCL VAR(&TYP) TYPE(*CHAR) LEN(6)
DCL VAR(&TODAT) TYPE(*CHAR) LEN(6)
DCL &ERRORSW *LGL /* Std err */
DCL &MSGID *CHAR LEN(7) /* Std err */
DCL &MSGDTA *CHAR LEN(100) /* Std err */
DCL &MSGF *CHAR LEN(10) /* Std err */
DCL &MSGFLIB *CHAR LEN(10) /* Std err */
MONMSG MSGID(CPF0000) EXEC(GOTO STDERR1) /* Std err */
CHGVAR VAR(&FROMFILE) VALUE(%SST(&FROMFILEF 1 10))
CHGVAR VAR(&FROMLIB) VALUE(%SST(&FROMFILEF 11 10))
CHGVAR VAR(&TOFILE) VALUE(%SST(&TOFILEF 1 10))
CHGVAR VAR(&TOLIB) VALUE(%SST(&TOFILEF 11 10))
IF COND(&FROMMBR *EQ '*FROMFILE') THEN(CHGVAR +
VAR(&FROMMBR) VALUE(&FROMFILE))
IF COND(&TOMBR *EQ '*TOFILE') THEN(CHGVAR +
VAR(&TOMBR) VALUE(&TOFILE))
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) +
MSGDTA('Dateiübertragung wird gestartet') +
TOPGMQ(*EXT) MSGTYPE(*STATUS)
CALL PGM(QY2FTML) PARM(&OPTION &FROMLIB &FROMFILE +
&FROMMBR &TYP &TOLIB &TOFILE &TOMBR &TODAT +
&MBROPT &RMTLOCNAM &PASSWORD &RC &MSGNUM)
IF COND((&RC *NE '0') *OR (&MSGNUM *NE ' ')) THEN(DO)
SNDPGMMSG MSGID(CPF9898) MSGF(QCPFMSG) +
MSGDTA('Dateiübertragung abnormal beendet +
- Status ' !! &RC !! ' - MSG-Nr ' !! +
&MSGNUM) TOPGMQ(*EXT)
ENDDO
ENDDO
ENDE:
RETURN
STDERR1: /* Standard error handling routine */
IF &ERRORSW SNDPGMMSG MSGID(CPF9999) +
MSGF(QCPFMSG) MSGTYPE(*ESCAPE) /* Func chk */
CHGVAR &ERRORSW '1' /* Set to fail ir error occurs */
STDERR2: RCVMSG MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGF) MSGFLIB(&MSGFLIB)
IF (&MSGID *EQ ' ') GOTO STDERR3
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
GOTO STDERR2 /* Loop back for addl diagnostics */
STDERR3: RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
MSGF(&MSGF) MSGFLIB(&MSGFLIB)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
ENDPGM
zuerst das CLP compilieren ...........
CRTCLPGM PGM(QGPL/FTS)
SRCFILE(QGPL/QCLSRC)
SRCMBR(FTS)
dann den CMD compilieren ............
CRTCMD CMD(QGPL/FTS)
PGM(QGPL/FTS)
SRCFILE(QGPL/QCMDSRC)
ALLOW(*INTERACT *IPGM)
und fertig ist ein weitere Datei-Übertragungsmöglichkeit
FTS ..... + BT04
von Datei . . . . . . . . . . . FROMFILE
Bibliothek . . . . . . . . . . *LIBL
nach Datei . . . . . . . . . . . TOFILE
Bibliothek . . . . . . . . . . *LIBL
ferner Standort System . . . . . RMTLOCNAM
Kennwort für fernen Standort . . PASSWORD
von Teildatei . . . . . . . . . FROMMBR *FROMFILE
nach Teildatei . . . . . . . . . TOMBR *TOFILE
nach Teildatei ersetzen (Y/N) . MBROPT N
Senden = S / Empfangen = R . . OPTION S
2 Vorteile:
im Gegensatz zu SNDNETF muss auf dem Empfangssystem die Datei nicht existieren, sie wird mit o.g. CMD/CLP angelegt.
und
im Gegensatz zu SNDNETF muss nicht QSNADS konfiguriert sein,
d.h. SBS QSNADS braucht nicht gestartet zu sein !
und vor allem auf die richtige Richtung (senden/empfangen) achten !!!!
(ohne Gewähr)
viel Spaß beim testen.