You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用REXX/ISPF宏为PDS中JCL成员添加/*XEQ卡

批量给JCL添加/*XEQ卡的REXX实现方案

一、REXX遍历PDS成员的核心代码实现

以下是基于ISPF服务的REXX脚本,可遍历指定PDS的所有成员,自动在作业卡下方插入/*XEQ卡:

/* REXX */
ARG pdsname "("membermask")"
IF pdsname = "" THEN DO
  SAY "请输入目标JCL库名,格式:'USER.PROD.JCL'(*)"
  EXIT 8
END

/* 初始化ISPF环境 */
ADDRESS ISPEXEC
"CONTROL ERRORS RETURN"

/* 打开目标PDS库 */
"LMOPEN DATAID(DID) DATASET('"pdsname"') OPTION(INPUT OUTPUT)"
IF RC <> 0 THEN DO
  SAY "打开库'"pdsname"'失败,RC="RC
  EXIT RC
END

/* 循环读取库内成员列表 */
DO WHILE RC = 0
  "LMMLIST DATAID("DID") OPTION(LIST) MEMBER(MEM) STATS(STATS)"
  IF RC = 0 THEN CALL PROCESS_MEMBER pdsname, MEM
END

/* 关闭PDS库 */
"LMCLOSE DATAID("DID")"
EXIT 0

/* 单个JCL成员处理子过程 */
PROCESS_MEMBER:
PARSE ARG dsn, mem
"LMOPEN DATAID(MID) DATASET('"dsn"("mem")') OPTION(INPUT OUTPUT)"
IF RC <> 0 THEN DO
  SAY "打开成员'"dsn"("mem")"'失败,RC="RC
  RETURN
END

/* 读取JCL内容到数组 */
"LMREAD DATAID("MID") STEM(JCL.)"
IF RC = 0 THEN DO
  /* 跳过已存在/*XEQ卡的成员 */
  has_xeq = 0
  DO i = 1 TO JCL.0
    IF SUBSTR(JCL.i,1,5) = "/*XEQ" THEN DO
      has_xeq = 1
      LEAVE
    END
  END
  IF has_xeq = 1 THEN DO
    SAY "成员"mem"已包含/*XEQ卡,跳过"
    "LMCLOSE DATAID("MID")"
    RETURN
  END

  /* 定位作业卡(匹配//开头且包含JOB关键字的行) */
  jobcard_pos = 0
  DO i = 1 TO JCL.0
    IF SUBSTR(JCL.i,1,2) = "//" & POS("JOB", JCL.i) > 0 THEN DO
      jobcard_pos = i
      LEAVE
    END
  END

  /* 插入/*XEQ卡到作业卡下一行 */
  IF jobcard_pos > 0 THEN DO
    DO j = JCL.0 DOWNTO jobcard_pos + 1
      JCL.j = JCL.j - 1
    END
    JCL.jobcard_pos + 1 = "/*XEQ LPAR(MAINLPAR)" /* 替换为你的主LPAR名称 */
    JCL.0 = JCL.0 + 1

    /* 将修改后的内容写回成员 */
    "LMREPL DATAID("MID") STEM(JCL.)"
    IF RC = 0 THEN
      SAY "成功修改成员:"mem
    ELSE
      SAY "修改成员"mem"失败,RC="RC
  END
END

"LMCLOSE DATAID("MID")"
RETURN

二、宏的配置与运行步骤

  1. 保存脚本:把上述代码保存到你的REXX数据集,比如USER.REXX.LIB(ADDXEQ)
  2. 创建ISPF宏:
    • 进入ISPF主菜单,选择3.7(数据集列表),定位到你的REXX库
    • 选中成员ADDXEQ,输入EDIT进入编辑界面,执行CREATE MACRO命令完成宏定义
    • 或直接在ISPF命令行执行:ISPEXEC CREATE MACRO(ADDXEQ) DSN('USER.REXX.LIB')
  3. 运行宏:
    • 全量修改:在ISPF命令行输入ADDXEQ 'USER.PROD.JCL'(*),其中USER.PROD.JCL是目标JCL库
    • 增量修改:指定成员掩码,比如修改所有PROD开头的成员:ADDXEQ 'USER.PROD.JCL'(PROD*)
  4. 前置注意事项:
    • 务必先备份目标JCL库:执行TSO命令COPYDSN 'USER.PROD.JCL' TO('USER.PROD.JCL.BAK')
    • 先测试单个成员验证逻辑:ADDXEQ 'USER.PROD.JCL'(TESTJOB01)

三、针对Endevor输出JCL的优化点

如果Endevor生成的JCL有特殊格式,可调整作业卡判断逻辑,比如匹配更严格的作业卡格式:

/* 仅匹配//作业名 JOB 开头的行 */
IF SUBSTR(JCL.i,1,2) = "//" & SUBSTR(JCL.i,3,1) <> "*" & POS(" JOB ", JCL.i) > 0 THEN DO
  jobcard_pos = i
  LEAVE
END

内容的提问来源于stack exchange,提问作者Monica Collins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:12:09