Versuch es einmal damit (habe ich mal im Dezember 2005 geschrieben und ist immer noch im Einsatz):
Beispiel:

Code:
SCRFTP     RMTSYS(&SERVER) USER(&USER) PASSWORD(&PWD) +     
             SCRIPT(&FTPPFAD ('del ' *CAT &TMPNAME) +       
             'namefmt 1' 'sendepsv 0' ('lcd ' *CAT +        
             &LCLPFAD) ('put ' *CAT &TMPNAME) ('ren ' +     
             *CAT &TMPNAME *BCAT &ORGNAME)) +               
             LOG(*OUTFILE) OUTFILE(USMOD_16/XHYDRA1) +      
             COMPARE('226 Transfer complete.')              
MONMSG     MSGID(CPF0000) EXEC(CHGVAR VAR(&ERR) +           
             VALUE('1'))
Kommando SCRFTP
Code:
             CMD        PROMPT('Srcipting FTP')

             PARM       KWD(RMTSYS) TYPE(*CHAR) LEN(256) +
                          SPCVAL((*INTNETADR *INTNETADR)) MIN(1) +
                          EXPR(*YES) VARY(*YES *INT2) +
                          PROMPT('Fernes System')

             PARM       KWD(USER) TYPE(*CHAR) LEN(30) MIN(1) +
                          EXPR(*YES) VARY(*YES *INT2) +
                          PROMPT('Benutzer')

             PARM       KWD(PASSWORD) TYPE(*CHAR) LEN(30) MIN(1) +
                          EXPR(*YES) VARY(*YES *INT2) +
                          DSPINPUT(*PROMPT) PROMPT('Kennwort')

             PARM       KWD(SCRIPT) TYPE(*CHAR) LEN(80) MIN(1) +
                          MAX(100) EXPR(*YES) INLPMTLEN(32) +
                          PROMPT('Auszufhrende FTP-Befehle')

             PARM       KWD(LOG) TYPE(*CHAR) LEN(10) RSTD(*YES) +
                          DFT(*PRINT) VALUES(*PRINT *OUTFILE) +
                          EXPR(*YES) PROMPT('Protokoll')

             PARM       KWD(OUTFILE) TYPE(FILE) DFT(*NONE) +
                          SNGVAL((*NONE)) PROMPT('Protokolldatei')

             PARM       KWD(COMPARE) TYPE(*CHAR) LEN(80) DFT(*NONE) +
                          SPCVAL((*NONE)) EXPR(*YES) VARY(*YES +
                          *INT2) PROMPT('Vergleichszeichenfolge')

             PARM       KWD(INTNETADR) TYPE(*CHAR) LEN(16) VARY(*YES +
                          *INT2) PMTCTL(*PMTRQS) +
                          PROMPT('Internet-Adresse')

             PARM       KWD(CCSID) TYPE(*DEC) LEN(5 0) DFT(*DFT) +
                          RANGE(1 65533) SPCVAL((*DFT 0)) +
                          PMTCTL(*PMTRQS) PROMPT(CCSID)

             PARM       KWD(PORT) TYPE(*DEC) LEN(5 0) DFT(*DFT) +
                          RANGE(1 65535) SPCVAL((*DFT 21) (*SECURE +
                          990)) PMTCTL(*PMTRQS) PROMPT('Port')

             PARM       KWD(SECCNN) TYPE(*CHAR) LEN(10) RSTD(*YES) +
                          DFT(*DFT) SPCVAL((*DFT) (*NONE) (*SSL) +
                          (*IMPLICIT)) PMTCTL(*PMTRQS) +
                          PROMPT('Sichere Verbindung')

             PARM       KWD(DTAPROT) TYPE(*CHAR) LEN(10) RSTD(*YES) +
                          DFT(*DFT) SPCVAL((*DFT) (*CLEAR) +
                          (*PRIVATE)) PMTCTL(*PMTRQS) +
                          PROMPT('Datenschutz')

 FILE:       QUAL       TYPE(*NAME) LEN(10)
             QUAL       TYPE(*NAME) LEN(10) PROMPT('Bibliothek')

CLP für SCRFTP
Code:
             PGM        PARM(&RMTSYS &USER &PASSWORD &SCRIPT &LOG +
                          &OUTFILE &COMPARE &INTNETADR &CCSID &PORT +
                          &SECCNN &DTAPROT)

             DCL        VAR(&RMTSYS) TYPE(*CHAR) LEN(258)
             DCL        VAR(&USER) TYPE(*CHAR) LEN(32)
             DCL        VAR(&PASSWORD) TYPE(*CHAR) LEN(32)
             DCL        VAR(&SCRIPT) TYPE(*CHAR) LEN(2000)
             DCL        VAR(&LOG) TYPE(*CHAR) LEN(10)
             DCL        VAR(&OUTFILE) TYPE(*CHAR) LEN(20)
             DCL        VAR(&COMPARE) TYPE(*CHAR) LEN(82)
             DCL        VAR(&INTNETADR) TYPE(*CHAR) LEN(16)
             DCL        VAR(&CCSID) TYPE(*DEC) LEN(5)
             DCL        VAR(&PORT) TYPE(*DEC) LEN(5)
             DCL        VAR(&SECCNN) TYPE(*CHAR) LEN(10)
             DCL        VAR(&DTAPROT) TYPE(*CHAR) LEN(10)

             DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)
             DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGL) TYPE(*CHAR) LEN(10)
             DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(512)

             DCL        VAR(&SCRINP) TYPE(*CHAR) LEN(10) +
                          VALUE(SCRFTPINP)
             DCL        VAR(&SCROUT) TYPE(*CHAR) LEN(10) +
                          VALUE(SCRFTPOUT)

             MONMSG     MSGID(CPF0000) EXEC(GOTO CMDLBL(FEHLER))

/* BEREINIGEN INPUT-DATEI */
             DLTF       FILE(QTEMP/&SCRINP)
             MONMSG     MSGID(CPF0000) EXEC(DO)
             RCVMSG     MSGTYPE(*EXCP)
             ENDDO

/* BEREINIGEN OUTPUT-DATEI */
             DLTF       FILE(QTEMP/&SCROUT)
             MONMSG     MSGID(CPF0000) EXEC(DO)
             RCVMSG     MSGTYPE(*EXCP)
             ENDDO

/* ERSTELLEN DATEIEN */
             CRTPF      FILE(QTEMP/&SCRINP) RCDLEN(80)
             CRTPF      FILE(QTEMP/&SCROUT) RCDLEN(80)

/* šBERSCHREIBUNGEN SETZEN */
             OVRDBF     FILE(INPUT) TOFILE(QTEMP/&SCRINP) +
                          OVRSCOPE(*CALLLVL)
             OVRDBF     FILE(OUTPUT) TOFILE(QTEMP/&SCROUT) +
                          OVRSCOPE(*CALLLVL)

/* PROGRAMM-AUSFšHRUNG */
             CALL       PGM(SCRFTPX) PARM(&RMTSYS &USER &PASSWORD +
                          &SCRIPT &LOG &OUTFILE &COMPARE &INTNETADR +
                          &CCSID &PORT &SECCNN &DTAPROT)

             IF         COND(&LOG = '*PRINT') THEN(DO)
             OVRPRTF    FILE(QSYSPRT) SPLFNAME(SCRFTP) +
                          OPNSCOPE(*ACTGRPDFN)
             CPYF       FROMFILE(QTEMP/&SCROUT) TOFILE(QSYSPRT)
             ENDDO

             IF         COND(&LOG = '*OUTFILE') THEN(DO)
             CHKOBJ     OBJ(%SST(&OUTFILE 11 10)/%SST(&OUTFILE 1 +
                          10)) OBJTYPE(*FILE) MBR(*FIRST) AUT(*USE)
             MONMSG     MSGID(CPF0000) EXEC(DO)
             RCVMSG     MSGTYPE(*EXCP)
             CRTPF      FILE(%SST(&OUTFILE 11 10)/%SST(&OUTFILE 1 +
                          10)) RCDLEN(80) TEXT('Output from SCRFTP')
             ENDDO
             CPYF       FROMFILE(QTEMP/&SCROUT) TOFILE(%SST(&OUTFILE +
                          11 10)/%SST(&OUTFILE 1 10)) MBROPT(*ADD) +
                          FMTOPT(*NOCHK)
             ENDDO

             RCLRSC

             IF         COND(%BIN(&COMPARE 1 2) = 7 *AND +
                          %SST(&COMPARE 3 7) = 'CPF9898') THEN(DO)
             SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) +
                          MSGDTA('Vergleichszeichenfolge nicht +
                          gefunden') TOPGMQ(*PRV) MSGTYPE(*ESCAPE)
             ENDDO

             SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) +
                          MSGDTA('FTP-Script erfolgreich +
                          ausgefhrt') TOPGMQ(*PRV) MSGTYPE(*COMP)
             RETURN

FEHLER:
             RCVMSG     MSGTYPE(*EXCP) RMV(*NO) MSGDTA(&MSGDTA) +
                          MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGL)
             RCLRSC
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGL/&MSGF) +
                          MSGDTA(&MSGDTA) TOPGMQ(*PRV) MSGTYPE(*ESCAPE)

             ENDPGM
RPGLE für SCRFTPX
Code:
     h
     fINPUT     o    f   80        disk    usropn
     foutput    if   f   80        disk    usropn

     d RMTSYS          s            256    varying
     d USER            s             30    varying
     d PASSWORD        s             30    varying
     d SCRIPT          ds
     d  AnzZl                         5I 0
     d  ScrLin                       80    dim(100)
     d LOG             s             10
     d OUTFILE         s             20
     d COMPARE         s             80    varying
     d INTNETADR       s             16    varying
     d CCSID           s              5p 0
     d PORT            s              5p 0
     d SECCNN          s             10
     d DTAPROT         s             10

     d AKT             s              5I 0
     d WKSATZ          ds            80

     d QCMD            s            256
     d QCMDL           s             15p 5 inz(256)

     iOUTPUT    bb
     i                                  1   80  WKPROT

     c     *entry        plist
     c                   parm                    RMTSYS
     c                   parm                    USER
     c                   parm                    PASSWORD
     c                   parm                    SCRIPT
     c                   parm                    LOG
     c                   parm                    OUTFILE
     c                   parm                    COMPARE
     c                   parm                    INTNETADR
     c                   parm                    CCSID
     c                   parm                    PORT
     c                   parm                    SECCNN
     c                   parm                    DTAPROT

     c                   open      INPUT
     c                   eval      WKSATZ = USER + ' ' + PASSWORD
     c                   write     INPUT         WKSATZ
     c                   do        AnzZl         AKT
     c                   eval      WKSATZ = ScrLin(AKT)
     c                   write     INPUT         WKSATZ
     c                   enddo
     c                   eval      WKSATZ = 'quit'
     c                   write     INPUT         WKSATZ
     c                   close     INPUT

     c* aufrufen FTP
     c                   if        RMTSYS <> '*INTNETADR'
     c                   eval      QCMD = 'FTP RMTSYS(''' + RMTSYS + ''')'
     c                   else
     c                   eval      QCMD = 'FTP RMTSYS(' + RMTSYS + ')'
     c                                  + ' INTNETADR(''' + INTNETADR
     c                                  + ''')'
     c                   endif
     c                   if        CCSID <> *zero
     c                   eval      QCMD = %trim(QCMD)
     c                                  + ' CCSID(' + %char(CCSID) + ')'
     c                   endif
     c                   eval      QCMD = %trim(QCMD)
     c                                  + ' PORT(' + %char(PORT) + ')'
     c                                  + ' SECCNN(' + %trim(SECCNN) + ')'
     c                                  + ' DTAPROT(' + %trim(DTAPROT) + ')'

     c                   monitor
     c                   call      'QCMDEXC'
     c                   parm                    QCMD
     c                   parm                    QCMDL
     c                   on-error  *all
     c                   eval      COMPARE = 'CPF9898'
     c                   eval      *inlr = *off
     c                   return
     c                   endmon

     c                   if        COMPARE <> '*NONE'
     c                             and COMPARE <> *blank

     c                   open      OUTPUT
     c                   do        *hival
     c                   read      OUTPUT
     c                   if        %eof
     c                   leave
     c                   endif
     c                   if        %scan(%trim(COMPARE):WKPROT) > *zero
     c                   eval      COMPARE = 'OK'
     c                   leave
     c                   endif

     c                   enddo
     c                   close     OUTPUT

     c                   if        COMPARE <> 'OK'
     c                   eval      COMPARE = 'CPF9898'
     c                   endif

     c                   endif

     c                   eval      *inlr = *off
     c                   return