0

我一直在尝试从 JCL 中运行 OGET 命令。通常我会使用 ISPF;6 使用 ishell-command 行,然后从那里运行命令,但是,这项工作太大了,我需要自动执行该任务。

到目前为止,我尝试过的是使用 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 

有人可以帮忙吗?

4

3 回答 3

1

我没有找到解决我最初问题的方法,但我写了一个 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                              
于 2019-12-17T17:56:08.337 回答
1

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

//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'" 
于 2019-12-18T07:04:32.310 回答
1

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)                                        
//* 
于 2019-12-18T08:52:33.290 回答