我如何 运行 ISPF 批量编辑宏

How can I run ISPF Edit Macros in Batch

我经常编写和使用 ISPF 编辑宏。但是,在前台调用它们非常耗时。我可以使用 Rexx 程序 运行 通过批处理对 PDS 的所有成员或选定成员编辑宏吗?

这是一个编辑宏,它将 运行 另一个针对 PDS 的所有成员的宏:

/*REXX - Edit macro to invoke the same macro against all members    */
/*       in the data set being edited.                              */
/*       Syntax:                                                    */
/*          ALLMEM macro prefix                                     */
/*             macro is the name of a macro to execute.  If it      */
/*                   is a program macro, remember to specify the    */
/*                   exclamation point before the name.             */
/*                                                                  */
/*             prefix is an optional prefix to use when selecting   */
/*                    members to process.  for example, ISR will    */
/*                    process all members starting with ISR.        */
/*                                                                  */
/*       Note that the macro which this calls can have an           */
/*       ISREDIT END or ISREDIT CANCEL in it to avoid the display   */
/*------------------------------------------------------------------*/
Address 'ISPEXEC'
'ISREDIT MACRO (WORKMAC,PREFIX)'
'ISREDIT (DATA1) = DATAID'
'ISREDIT (THISONE) = MEMBER '
Address 'ISPEXEC' 'LMOPEN DATAID('data1') OPTION(INPUT)'
parse upper var prefix prefix .
member1=''
Do Until lmrc\=0
  Address 'ISPEXEC' 'LMMLIST DATAID('data1') OPTION(LIST)',
                    'MEMBER(MEMBER1) STATS(YES)'
  lmrc = rc
  If lmrc = 0           ,/* if member name returned                 */
    & member1\=thisone  ,/* and it isn't this member                */
    & (                 ,/* and prefix check is ok...               */
        prefix=''       ,/*    No prefix specified                  */
        | substr(member1,1,length(prefix))=prefix,/* or prefix match*/
      ) Then
    Do                   /* invoke edit with specified initial macro*/
      Address 'ISPEXEC' 'CONTROL ERRORS CANCEL'
      Address 'ISPEXEC' 'EDIT DATAID('data1')',
              'MEMBER('member1') MACRO('workmac')'
      Address 'ISPEXEC' 'CONTROL ERRORS CANCEL'
    End
End
Address 'ISPEXEC' 'LMMLIST DATAID('data1') OPTION(FREE)'
Address 'ISPEXEC' 'LMCLOSE DATAID('data1')'
'ISREDIT DEFINE 'workmac' MACRO CMD'
 If prefix=''                              ,/* No prefix specified */
    | substr(thisone,1,length(prefix))=prefix,   /* or prefix match*/
   then
     'ISREDIT 'workmac           /* perform macro for this member  */

它在 ISPF 视图或编辑下使用,但可以批量工作,但您也可以将其关闭并坐等它 运行 将您的宏针对所有 PDS,节省您不必在每个成员上手动 运行 它。

您可以使用图书馆管理功能。

  • 您使用 LMINIT 获取 DATA ID待编辑的数据集,然后使用LMOPEN函数打开数据集。

    • 如果您想对 PDS 或 PDSE 的一个或多个成员执行宏,则可以使用 LMMLIST
  • 然后您可以使用 EDIT 函数将宏指定为 use/invoke, 应该有一个 ISREDIT 结束ISREDIT 取消
    • 如果使用了 LMMLIST,则应使用带有 OPTION(FREE)
    • 的 LMMLIST 释放列表
  • 然后应使用 LMCLOSE 关闭数据集。
  • 然后应该使用
  • LMFREE 来释放 DATA ID.

以上可以用各种编程语言完成,尽管 REXX 可能是最简单的。