2016-08-13 57 views
1

我經常編寫和使用ISPF編輯宏。但是,在前臺調用它們非常耗時。我可以使用Rexx程序通過批次對所有或部分PDS成員運行編輯宏嗎?如何在批處理中運行ISPF編輯宏

+0

你正在回答你自己的問題邁克? ;) –

+1

大衛,是的。顯然,這樣做是可以的,因爲它考慮到了幫助他人和本着SO的精神。 – MikeT

回答

0

這裏有一個編輯宏將運行鍼對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,從而避免你必須手動在每個成員上運行它。