如何使用REXX / CLIST批处理程序(无ISPF)复制成员?

时间:2009-11-04 03:48:15

标签: mainframe rexx tso clist

在z / OS下,我想写一个REXX或CLIST脚本将一个顺序数据集复制到另一个,然后运行另一个脚本(REXX)。另一个脚本需要存在特定的SDS,我希望能够在运行第二个脚本之前将许多选项之一复制到该成员。这是来自TSO所以我无法访问任何花哨的ISPF内容。

所以,基本上:

Copy 'level1.level2.name.type1' to 'level1.level2.name'
runother p1 p2 p3

runother Rexx脚本使用'level1.level2.name'来做自己的魔术 - 我只是为我的每一种可能性提供一个不同的。

所以我需要一个名为'xx42'的脚本,它复制'level1.level2.name.42'然后我可以修改那个除了42以外的值。更好的是参数化那个脚本所以我可以使用

xx 42 p1 p2 p3

xx 27 p1 p2 p3

而不是为每个值都有一个脚本。这将复制给定的SDS,然后将参数p1p2p3传递给runother

3 个答案:

答案 0 :(得分:2)

在搜索其他内容时,我发现了这篇文章。 (即我没有花2年的时间来制定这个回应)并且认为未来的主要人(我们还存在吗?)可能会觉得它很有用。

你也可以做一个SMCOPY:

address TSO "SMCOPY FDS('LEVEL1.LEVEL2.NAME.42') TDS('LEVEL2.LEVEL2.NAME')"

FDS - 从数据集,TDS到数据集。如果TDS不存在,您将获得返回码4,但副本将被执行。您也可以使用SMCOPY复制库成员。

答案 1 :(得分:1)

经过一番摆弄后,我发现你可以手动分配所需的数据集并运行IEBGENER进行复制:

/* REXX */

"ALLOC FI(SYSPRINT) DUMMY REUSE"
"ALLOC FI(SYSIN) DUMMY REUSE"
"ALLOC FI(SYSUT1) DA('LEVEL1.LEVEL2.NAME.42') SHR REUSE"
"ALLOC FI(SYSUT2) DA('LEVEL1.LEVEL2.NAME') SHR REUSE"
"IEBGENER"
RC2 = RC
"FREE FI(SYSUT1)"
"FREE FI(SYSUT2)"
"FREE FI(SYSPRINT)"
"FREE FI(SYSIN)"
IF RC2 ^= 0 THEN DO
  SAY "IEBGENER FAILED."
  END
ELSE DO
  RUNOTHER P1 P2 P3
  END

答案 2 :(得分:0)

您也可以使用SORT从SORTIN到SORTOUT进行复制。您可以使用参数将proc包装在proc中,或使用SET语句等