在JCL

我一直试图在JCL中运行OGET命令。通常,我会使用通过ISPF; 6的ishell命令行,然后从那里运行命令,但是,这项工作太大,以至于我需要使任务自动化。

到目前为止,我一直在尝试使用IKJEF01,IKJEFT01和OSHELL命令以及BPXBATCH发送命令,但是没有一个起作用。

我要使用的命令如下:

OGET'/CPU/TMP/filename.IND''library.INDEX.EHH'二进制转换(否)

我尝试使用IKJEFT01和OSHELL:

//TMP1  EXEC  PGM=IKJEFT01,//            DYNAMNBR=200                                  
//SYSPROC  DD  Dsn=SYS1.SBPXEXEC,DISP=SHR                   
//*                                                         
//SYSTSPRT DD  SYSOUT=*                                     
//SYSOUT   DD  SYSOUT=*                                     
//*                                                         
//SYSTSIN  DD  *                                            
OSHELL OGET '/CPU/TMP/filename.IND' 'library.INDEX.EHH' - 
             BINARY CONVERT(NO)                                        
//* 

我尝试使用BPXBATCH:

//SHELLCMD  EXEC PGM=BPXBATCH                                        
//STDERR     DD SYSOUT=*                                             
//STDOUT     DD SYSOUT=*                                             
//STDPARM    DD *                                                    
SH OGET '/CPU2/TMP/filename.IND' 'library.INDEX.EHH' BINARY CONVERT(NO)
/*                                                                   

两种方法都会产生相同的错误:

FSUM1006 A shell was not specified. Processing continues using the default shell name.
FSUM7332 syntax error: got (,expecting Newline

如果删除CONVERT(NO),则会出现以下错误:

FSUM1006 A shell was not specified. Processing continues using the default shell name.
OGET: FSUM7351 not found 

有人可以帮忙吗?

fanlianhou 回答:在JCL

我没有找到解决最初问题的方法,但是我写了一份REXX脚本来完成工作:

/* REXX demo */                                
ADDRESS TSO                                                  
"OGET '/CPU2/tmp/filename.ind'    'library.INDEX.EHH' BINARY
 CONVERT(NO)"   

这是我的CNTL使用以下代码调用的:

//STEPREXX EXEC PGM=IKJEFT01,PARM='REXX-name'
//SYSEXEC   DD DSN=PDS,DISP=SHR      
//SYSTSPRT  DD  SYSOUT=*                           
//SYSTSIN   DD  DUMMY                              
,

过去我有类似的任务,最终得到以下解决方案:

//COPYSTEP EXEC PGM=IKJEFT01
//         SET SRC='/CPU2/tmp/filename.ind'
//         SET Q=''''
//IN       DD PATH=&Q.&SRC.&Q,PATHOPTS=(ORDONLY)
//OUT      DD DSN=LIBRARY.INDEX.EHH,DISP=(,CATLG),//          SPACE=(TRK,(10,10),RLSE),RECFM=FB,LRECL=4000,BLKSIZE=0
//SYSTSPRT DD SYSOUT=*                                          
//SYSTSIN  DD *                                                  
 OCOPY INDD(IN) OUTDD(OUT) BINARY CONVERT(NO) PATHOPTS(USE)
/*

另一个选择是在USS中创建shell脚本,然后从JCL执行它。

//SHRUN  EXEC PGM=BPXBATCH,PARM='SH'                    
//STDIN     DD  PATH='/path/to/script/script.name',//          PATHOPTS=(OCREAT,ORDONLY),//          PATHMODE=(SIRWXU,SIROTH),//          PATHDISP=(KEEP,KEEP)                        
//STDOUT  DD SYSOUT=*                                   
//STDERR  DD SYSOUT=*                                   
//STDENV  DD *

脚本本身非常简单

cp -W "seqparms='RECFM=FB,LRECL=4000'" /CPU2/tmp/filename.ind "//'LIBRARY.INDEX.EHH'" 
,

OGET是TSO命令,可通过IKJEFT01直接访问。不需要调用OSHELL或BPXBATCH(顺便说一句,OSHELL只是调用BPXBATCH的REXX)。

直接在原始JCL中直接使用OGET(无需OSHELL命令),它将起作用:

//TMP1  EXEC  PGM=IKJEFT01,//            DYNAMNBR=200                                  
//SYSPROC  DD  DSN=SYS1.SBPXEXEC,DISP=SHR                                                                          
//SYSTSPRT DD  SYSOUT=*                                     
//SYSOUT   DD  SYSOUT=*                                                                                            
//SYSTSIN  DD  *                                            
OGET '/CPU/TMP/filename.IND' 'library.INDEX.EHH' - 
             BINARY CONVERT(NO)                                        
//* 
本文链接:https://www.f2er.com/2906086.html

大家都在问