

AWS 大型机现代化服务（托管运行时环境体验）不再向新客户开放。有关类似于 AWS 大型机现代化服务（托管运行时环境体验）的功能，请浏览 AWS 大型机现代化服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅[AWS 大型机现代化可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS 大型机现代化中可用的批处理工具
<a name="utilities-m2"></a>

大型机应用程序通常使用批处理实用程序来执行特定功能，例如对数据进行排序、使用 FTP 传输文件、将数据加载到数据库（例如） DB2、从数据库中卸载数据等。

当您将应用程序迁移到 AWS 大型机现代化时，您需要功能等同的替代实用程序，这些实用程序可以执行与您在大型机上使用的相同任务。其中一些实用程序可能已经作为 AWS 大型机现代化运行时引擎的一部分提供，但我们提供了以下替代实用程序：
+ M2SFTP – 使用 SFTP 协议启用安全的文件传输。
+ M2WAIT – 等待指定时间后，再继续执行批处理作业中的下一步操作。
+ TXT2PDF-将文本文件转换为 PDF 格式。
+ M2DFUTIL - 为数据集提供备份、恢复、删除和复制功能，类似于大型机 ADRDSSU 实用程序所提供的支持。
+ M2RUNCMD-允许你直接从 JCL 运行 Rocket Software（前身为 Micro Focus）命令、脚本和系统调用。

我们根据客户反馈开发了这些批处理实用程序，旨在使其提供与大型机实用程序相同的功能。目标是尽可能顺利地从大型机过渡到 AWS 大型机现代化。

**Topics**
+ [

## 二进制位置
](#location-utilities)
+ [

# M2SFTP 批处理实用程序
](m2sftp.md)
+ [

# M2WAIT 批处理实用程序
](m2wait.md)
+ [

# TXT2PDF 批处理实用程序
](txt2pdf.md)
+ [

# M2DFUTIL 批处理实用程序
](m2dfutil.md)
+ [

# M2RUNCMD 批处理实用程序
](m2runcmd.md)

## 二进制位置
<a name="location-utilities"></a>

这些实用程序已预装在 Rocket Enterprise Developer (ED) 和火箭软件 (ES) 产品上。您可以在以下位置找到 ED 和 ES 所有变体的实用程序：
+ Linux：`/opt/aws/m2/microfocus/utilities/64bit`
+ Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\32bit`
+ Windows（64 位）：`C:\AWS\M2\MicroFocus\Utilities\64bit`

# M2SFTP 批处理实用程序
<a name="m2sftp"></a>

M2SFTP 是一个 JCL 实用程序，旨在使用安全文件传输协议 (SFTP) 在系统之间执行安全的文件传输。该程序使用 Putty SFTP 客户端 `psftp` 来执行实际的文件传输。该程序的工作原理与大型机 FTP 实用程序类似，使用用户和密码进行身份验证。

**注意**  
不支持使用公钥进行身份验证。

要将您的大型机 FTP JCLs 转换为使用 SFTP，请更改为`PGM=FTP`。`PGM=M2SFTP`

**Topics**
+ [

## 支持的平台
](#m2sftp-platforms)
+ [

## 安装依赖项
](#m2sftp-dependencies)
+ [

## 配置 M2SFTP 以实现 AWS 大型机现代化托管
](#m2sftp-configure-managed)
+ [

## 在 Amazon EC2（包括 WorkSpaces 应用程序）上为 AWS 大型机现代化运行时配置 M2SFTP
](#m2sftp-configure-customer-infra)
+ [

## 样本 JCLs
](#m2sftp-jcl)
+ [

## Putty SFTP (PSFTP) 客户端命令参考
](#m2sftp-cmd-ref)
+ [

## 后续步骤
](#m2sftp-next)

## 支持的平台
<a name="m2sftp-platforms"></a>

您可以在以下任何平台上使用 M2SFTP：
+ AWS 大型机现代化火箭软件（前身为 Micro Focus）托管
+ 火箭软件运行时（在亚马逊 EC2 上）
+ 火箭软件企业开发者 (ED) 和 Rocket Software 企业服务器 (ES) 产品的所有变体。

## 安装依赖项
<a name="m2sftp-dependencies"></a>

**在 Windows 上安装 Putty SFTP 客户端**
+ 下载并安装 [Putty SFTP](https://www.putty.org/) 客户端。

**在 Linux 上安装 Putty SFTP 客户端：**
+ 运行以下命令来安装 Putty SFTP 客户端：

  ```
    sudo yum -y install putty
  ```

## 配置 M2SFTP 以实现 AWS 大型机现代化托管
<a name="m2sftp-configure-managed"></a>

如果您迁移的应用程序在 AWS 大型机现代化管理版上运行，则需要按如下方式配置 M2SFTP。
+ 为 MFFTP 设置相应的 Rocket 企业服务器环境变量。下面是几个示例：
  + `MFFTP_TEMP_DIR`
  + `MFFTP_SENDEOL`
  + `MFFTP_TIME`
  + `MFFTP_ABEND`

  您可以根据需要设置任意数量的变量。您可以在 JCL 中使用 `ENVAR DD` 语句设置它们。有关这些变量的更多信息，请参阅 Micro Focus 文档中的 [MFFTP 控制变量](https://www.microfocus.com/documentation/enterprise-developer/ed80/ED-Eclipse/GUID-3F94BBC8-CB97-4642-A4A7-4235C0C079E2.html)。

要测试配置，请参阅[样本 JCLs](#m2sftp-jcl)。

## 在 Amazon EC2（包括 WorkSpaces 应用程序）上为 AWS 大型机现代化运行时配置 M2SFTP
<a name="m2sftp-configure-customer-infra"></a>

如果您迁移的应用程序在 Amazon EC2 AWS 的大型机现代化运行时上运行，请按如下方式配置 M2SFTP。

1. 更改 [Micro Focus JES 程序路径](https://www.microfocus.com/documentation/enterprise-developer/ed80/ED-Eclipse/GUID-BC8A1796-9EDE-48EB-8363-31C9BDE7F96B.html)以包含批处理实用程序的二进制位置。如果您需要指定多个路径，请在 Linux 上使用冒号 (`:`) 分隔路径，在 Windows 上使用分号 (`;`) 分隔路径。
   + Linux：`/opt/aws/m2/microfocus/utilities/64bit`
   + Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\32bit`
   + Windows（64 位）：`C:\AWS\M2\MicroFocus\Utilities\64bit`

1. 为 MFFTP 设置相应的 Rocket 企业服务器环境变量。下面是几个示例：
   + `MFFTP_TEMP_DIR`
   + `MFFTP_SENDEOL`
   + `MFFTP_TIME`
   + ``MFFTP\$1ABEND

   您可以根据需要设置任意数量的变量。您可以在 JCL 中使用 `ENVAR DD` 语句设置它们。有关这些变量的更多信息，请参阅 Micro Focus 文档中的 [MFFTP 控制变量](https://www.microfocus.com/documentation/enterprise-developer/ed80/ED-Eclipse/GUID-3F94BBC8-CB97-4642-A4A7-4235C0C079E2.html)。

要测试配置，请参阅[样本 JCLs](#m2sftp-jcl)。

## 样本 JCLs
<a name="m2sftp-jcl"></a>

要测试安装，您可以使用以下其中一个示例 JCL 文件。

**M2 SFTP1 .jcl**

此 JCL 展示了如何调用 M2SFTP，以便将文件发送到远程 SFTP 服务器。请注意 `ENVVAR DD` 语句中设置的环境变量。

```
//M2SFTP1 JOB 'M2SFTP1',CLASS=A,MSGCLASS=X,TIME=1440
//*
//* Copyright Amazon.com, Inc. or its affiliates.* 
//* All Rights Reserved.* 
//*
//*-------------------------------------------------------------------**
//* Sample SFTP JCL step to send a file to SFTP server* 
//*-------------------------------------------------------------------**
//*
//STEP01 EXEC PGM=M2SFTP,
//            PARM='127.0.0.1 (EXIT=99 TIMEOUT 300'
//*
//SYSFTPD  DD  *
RECFM FB
LRECL 80
SBSENDEOL CRLF
MBSENDEOL CRLF
TRAILINGBLANKS FALSE
/*
//NETRC    DD  *
machine 127.0.0.1 login sftpuser password sftppass
/*
//SYSPRINT DD  SYSOUT=*
//OUTPUT   DD  SYSOUT=*
//STDOUT   DD  SYSOUT=*
//INPUT    DD  *
type a
locsite notrailingblanks
cd files
put 'AWS.M2.TXT2PDF1.PDF' AWS.M2.TXT2PDF1.pdf   
put 'AWS.M2.CARDDEMO.CARDDATA.PS' AWS.M2.CARDDEMO.CARDDATA.PS1.txt
quit
/*
//ENVVAR   DD *
MFFTP_VERBOSE_OUTPUT=ON
MFFTP_KEEP=N
/*
//*
//
```

**M2 SFTP2 .jcl**

此 JCL 展示了如何调用 M2SFTP，以便接收来自远程 SFTP 服务器的文件。请注意 `ENVVAR DD` 语句中设置的环境变量。

```
//M2SFTP2 JOB 'M2SFTP2',CLASS=A,MSGCLASS=X,TIME=1440
//*
//* Copyright Amazon.com, Inc. or its affiliates.* 
//* All Rights Reserved.* 
//*
//*-------------------------------------------------------------------**
//* Sample SFTP JCL step to receive a file from SFTP server* 
//*-------------------------------------------------------------------**
//*
//STEP01 EXEC PGM=M2SFTP
//*
//SYSPRINT DD  SYSOUT=*
//OUTPUT   DD  SYSOUT=*
//STDOUT   DD  SYSOUT=*
//INPUT    DD  *
open 127.0.0.1
sftpuser
sftppass
cd files
locsite recfm=fb lrecl=150
get AWS.M2.CARDDEMO.CARDDATA.PS.txt +
'AWS.M2.CARDDEMO.CARDDATA.PS2' (replace
quit
/*
//ENVVAR   DD *
MFFTP_VERBOSE_OUTPUT=ON
MFFTP_KEEP=N
/*
//*
//
```

**注意**  
我们强烈建议将 FTP 凭证存储在 NETRC 文件中，并限制只有经过授权的用户才能访问。

## Putty SFTP (PSFTP) 客户端命令参考
<a name="m2sftp-cmd-ref"></a>

PSFTP 客户端不支持所有 FTP 命令。以下列表显示了 PSFTP 支持的所有命令。


| 命令 | 说明 | 
| --- | --- | 
|  \$1  |  运行本地命令  | 
|  bye  |  完成 SFTP 会话  | 
|  cd  |  更改远程工作目录  | 
|  chmod  |  更改文件权限和模式  | 
|  关闭  |  完成 SFTP 会话但不退出 PSFTP  | 
|  del  |  删除远程服务器上的文件  | 
|  dir  |  列出远程文件  | 
|  exit  |  完成 SFTP 会话  | 
|  入  |  将文件从服务器下载到本地机器上  | 
|  help  |  提供帮助  | 
|  lcd  |  更改本地工作目录  | 
|  lpwd  |  打印本地工作目录  | 
|  ls  |  列出远程文件  | 
|  mget  |  一次下载多个文件  | 
|  mkdir  |  在远程服务器上创建目录  | 
|  mput  |  一次上传多个文件  | 
|  mv  |  移动或重命名远程服务器上的文件  | 
|  open  |  连接到主机  | 
|  put  |  将文件从本地机器上传到服务器  | 
|  pwd  |  打印远程工作目录  | 
|  quit  |  完成 SFTP 会话  | 
|  reget  |  继续下载文件  | 
|  ren  |  移动或重命名远程服务器上的文件  | 
|  reput  |  继续上传文件  | 
|  rm  |  删除远程服务器上的文件  | 
|  rmdir  |  删除远程服务器上的目录  | 

## 后续步骤
<a name="m2sftp-next"></a>

要使用 SFTP 将文件上传和下载到亚马逊简单存储服务，您可以将 M2SFTP 与结合使用 AWS Transfer Family，如以下博客文章中所述。
+ [使用 AWS SFTP 逻辑目录构建简单的数据分发服务](https://aws.amazon.com/blogs/storage/using-aws-sftp-logical-directories-to-build-a-simple-data-distribution-service/)
+ [启用密码身份验证以供 AWS Transfer for SFTP 使用 AWS Secrets Manager](https://aws.amazon.com/blogs/storage/enable-password-authentication-for-aws-transfer-for-sftp-using-aws-secrets-manager/)

# M2WAIT 批处理实用程序
<a name="m2wait"></a>

M2WAIT 是一个大型机实用程序，允许您在 JCL 脚本中引入等待期，即通过以秒、分钟或小时为单位指定持续时间。您可以直接从 JCL 调用 M2WAIT，方法是将要等待的时间作为输入参数传递。在内部，M2WAIT 程序调用 Rocket Software（前身为 Micro Focus）提供的模块`C$SLEEP`等待指定的时间。

**注意**  
您可以使用 Micro Focus 别名来替换 JCL 脚本中的名称。有关更多信息，请参阅 Micro Focus 文档中的 [JES 别名](https://www.microfocus.com/documentation/enterprise-developer/ed80/ED-Eclipse/GUID-D4206FF9-32C4-43E7-9413-5E7E96AA8092.html)。

**Topics**
+ [

## 支持的平台
](#m2wait-platforms)
+ [

## 配置 M2WAIT 以实现 AWS 大型机现代化托管
](#m2wait-configure-managed)
+ [

## 在 Amazon EC2（包括 WorkSpaces 应用程序）上为 AWS 大型机现代化运行时配置 M2WAIT
](#m2wait-configure-customer-infra)
+ [

## 示例 JCL
](#m2wait-jcl)

## 支持的平台
<a name="m2wait-platforms"></a>

您可以在以下任何平台上使用 M2WAIT：
+ AWS 大型机现代化火箭软件（前身为 Micro Focus）托管
+ 火箭软件运行时（在亚马逊 EC2 上）
+ 火箭软件企业开发者 (ED) 和 Rocket Software 企业服务器 (ES) 产品的所有变体。

## 配置 M2WAIT 以实现 AWS 大型机现代化托管
<a name="m2wait-configure-managed"></a>

如果您迁移的应用程序在 AWS 大型机现代化管理版上运行，则需要按如下方式配置 M2WAIT。
+ 通过传递输入参数（如[示例 JCL](#m2wait-jcl) 中所示）在 JCL 中使用 M2WAIT 程序。

## 在 Amazon EC2（包括 WorkSpaces 应用程序）上为 AWS 大型机现代化运行时配置 M2WAIT
<a name="m2wait-configure-customer-infra"></a>

如果您迁移的应用程序在 Amazon EC2 AWS 的大型机现代化运行时上运行，请按如下方式配置 M2WAIT。

1. 更改 [Micro Focus JES 程序路径](https://www.microfocus.com/documentation/enterprise-developer/ed80/ED-Eclipse/GUID-BC8A1796-9EDE-48EB-8363-31C9BDE7F96B.html)以包含批处理实用程序的二进制位置。如果您需要指定多个路径，请在 Linux 上使用冒号 (`:`) 分隔路径，在 Windows 上使用分号 (`;`) 分隔路径。
   + Linux：`/opt/aws/m2/microfocus/utilities/64bit`
   + Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\32bit`
   + Windows（64 位）：`C:\AWS\M2\MicroFocus\Utilities\64bit`

1. 通过传递输入参数（如[示例 JCL](#m2wait-jcl) 中所示）在 JCL 中使用 M2WAIT 程序。

## 示例 JCL
<a name="m2wait-jcl"></a>

要测试安装，您可以使用 `M2WAIT1.jcl` 程序。

此示例 JCL 展示了如何调用 M2WAIT 并采用几个不同的持续时间将其进行传递。

```
//M2WAIT1 JOB 'M2WAIT',CLASS=A,MSGCLASS=X,TIME=1440
//*
//* Copyright Amazon.com, Inc. or its affiliates.* 
//* All Rights Reserved.* 
//*
//*-------------------------------------------------------------------**
//* Wait for 12 Seconds*
//*-------------------------------------------------------------------**
//*
//STEP01 EXEC PGM=M2WAIT,PARM='S012'
//SYSOUT DD SYSOUT=*
//*
//*-------------------------------------------------------------------**
//* Wait for 0 Seconds (defaulted to 10 Seconds)*
//*-------------------------------------------------------------------**
//*
//STEP02 EXEC PGM=M2WAIT,PARM='S000'
//SYSOUT DD SYSOUT=*
//*
//*-------------------------------------------------------------------**
//* Wait for 1 Minute*
//*-------------------------------------------------------------------**
//*
//STEP03 EXEC PGM=M2WAIT,PARM='M001'
//SYSOUT DD SYSOUT=*
//*
//
```

# TXT2PDF 批处理实用程序
<a name="txt2pdf"></a>

TXT2PDF 是一种大型机实用程序，通常用于将文本文件转换为 PDF 文件。此实用程序使用相同的 TXT2 PDF 源代码（z/OS免费软件）。我们对其进行了修改，使其在 AWS 大型机现代化火箭软件（前身为 Micro Focus）运行时环境下运行。

**Topics**
+ [

## 支持的平台
](#txt2pdf-platforms)
+ [

## 为 AWS 大型机现代化配置 TXT2 PDF 托管
](#txt2pdf-configure-managed)
+ [

## 在 Amazon EC2 上为 AWS 大型机现代化运行时配置 TXT2 PDF（包括 WorkSpaces 应用程序）
](#txt2pdf-configure-customer-infra)
+ [

## 示例 JCL
](#txt2pdf-jcl)
+ [

## 修改
](#txt2pdf-mods)
+ [

## 参考
](#txt2pdf-ref)

## 支持的平台
<a name="txt2pdf-platforms"></a>

您可以在以下任何平台上使用 TXT2 PDF：
+ AWS 大型机现代化火箭软件托管
+ 火箭软件运行时（在亚马逊 EC2 上）
+ 火箭企业开发者 (ED) 和 Rocket Enterprise Server (ES) 产品的所有变体。

## 为 AWS 大型机现代化配置 TXT2 PDF 托管
<a name="txt2pdf-configure-managed"></a>

如果您迁移的应用程序在 AWS 大型机现代化管理版上运行，请按如下方式配置 TXT2 PDF。
+ 创建一个名为 `AWS.M2.REXX.EXEC` 的 REXX EXEC 库。下载这些 [REXX 模块](https://drm0z31ua8gi7.cloudfront.net/utilities/mf/TXT2PDF/rexx/TXT2PDF_rexx.zip)并将其复制到库中。
  + `TXT2PDF.rex`- TXT2 PDF z/OS 免费软件（已修改）
  + `TXT2PDFD.rex`- TXT2 PDF z/OS 免费软件（未修改）
  + `TXT2PDFX.rex`- TXT2 PDF z/OS 免费软件（已修改）
  + `M2GETOS.rex` – 检查操作系统类型（Windows 或 Linux）

要测试配置，请参阅[示例 JCL](#txt2pdf-jcl)。

## 在 Amazon EC2 上为 AWS 大型机现代化运行时配置 TXT2 PDF（包括 WorkSpaces 应用程序）
<a name="txt2pdf-configure-customer-infra"></a>

如果您迁移的应用程序在 Amazon EC2 AWS 的大型机现代化运行时上运行，请按如下方式配置 TXT2 PDF。

1. 将 Rocket Software 环境变量`MFREXX_CHARSET`设置为适当的值，例如 ASCII 数据的 “`A`”。
**重要**  
输入错误的值可能会导致数据转换问题（从 EBCDIC 到 ASCII），使生成的 PDF 无法读取或无法操作。我们建议设置 `MFREXX_CHARSET` 来匹配 `MF_CHARSET`。

1. 更改 [Micro Focus JES 程序路径](https://www.microfocus.com/documentation/enterprise-developer/ed80/ED-Eclipse/GUID-BC8A1796-9EDE-48EB-8363-31C9BDE7F96B.html)以包含批处理实用程序的二进制位置。如果您需要指定多个路径，请在 Linux 上使用冒号 (`:`) 分隔路径，在 Windows 上使用分号 (`;`) 分隔路径。
   + Linux：`/opt/aws/m2/microfocus/utilities/64bit`
   + Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\32bit`
   + Windows（64 位）：`C:\AWS\M2\MicroFocus\Utilities\64bit`

1. 创建一个名为 `AWS.M2.REXX.EXEC`` 的 REXX EXEC 库。下载这些 [REXX 模块](https://drm0z31ua8gi7.cloudfront.net/utilities/mf/TXT2PDF/rexx/TXT2PDF_rexx.zip)并将其复制到库中。
   + `TXT2PDF.rex`- TXT2 PDF z/OS 免费软件（已修改）
   + `TXT2PDFD.rex`- TXT2 PDF z/OS 免费软件（未修改）
   + `TXT2PDFX.rex`- TXT2 PDF z/OS 免费软件（已修改）
   + `M2GETOS.rex` – 检查操作系统类型（Windows 或 Linux）

要测试配置，请参阅[示例 JCL](#txt2pdf-jcl)。

## 示例 JCL
<a name="txt2pdf-jcl"></a>

要测试安装，您可以使用以下其中一个示例 JCL 文件。

**TXT2PDF1.jcl**

此示例 JCL 文件使用 DD 名称进行 TXT2 PDF 转换。

```
//TXT2PDF1 JOB 'TXT2PDF1',CLASS=A,MSGCLASS=X,TIME=1440
//*
//* Copyright Amazon.com, Inc. or its affiliates.* 
//* All Rights Reserved.* 
//*
//*-------------------------------------------------------------------**
//* PRE DELETE*
//*-------------------------------------------------------------------**
//*
//PREDEL  EXEC PGM=IEFBR14
//* 
//DD01     DD DSN=AWS.M2.TXT2PDF1.PDF.VB,                      
//            DISP=(MOD,DELETE,DELETE)
//*
//DD02     DD DSN=AWS.M2.TXT2PDF1.PDF,                       
//            DISP=(MOD,DELETE,DELETE)
//* 
//*-------------------------------------------------------------------**
//* CALL TXT2PDF TO CONVERT FROM TEXT TO PDF (VB)*
//*-------------------------------------------------------------------**
//*
//STEP01 EXEC PGM=IKJEFT1B
//*
//SYSEXEC  DD DISP=SHR,DSN=AWS.M2.REXX.EXEC
//*
//INDD     DD *
1THIS IS THE FIRST LINE ON THE PAGE 1
0THIS IS THE THIRD LINE ON THE PAGE 1
-THIS IS THE   6TH LINE ON THE PAGE 1
THIS IS THE   7TH LINE ON THE PAGE 1
+____________________________________ - OVERSTRIKE 7TH LINE          
1THIS IS THE FIRST LINE ON THE PAGE 2
0THIS IS THE THIRD LINE ON THE PAGE 2
-THIS IS THE   6TH LINE ON THE PAGE 2 
THIS IS THE   7TH LINE ON THE PAGE 2
+____________________________________ - OVERSTRIKE 7TH LINE                 
/*
//*
//OUTDD    DD DSN=AWS.M2.TXT2PDF1.PDF.VB,
//            DISP=(NEW,CATLG,DELETE),
//            DCB=(LRECL=256,DSORG=PS,RECFM=VB,BLKSIZE=0)
//*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD DDNAME=SYSIN
//*
//SYSIN    DD *
%TXT2PDF BROWSE Y IN DD:INDD +
OUT DD:OUTDD +
CC YES
/*
//*
//*-------------------------------------------------------------------**
//* CONVERT PDF (VB) TO PDF (LSEQ - BYTE STREAM)*
//*-------------------------------------------------------------------**
//* 
//STEP02 EXEC PGM=VB2LSEQ
//*
//INFILE   DD DSN=AWS.M2.TXT2PDF1.PDF.VB,DISP=SHR             
//*
//OUTFILE  DD DSN=AWS.M2.TXT2PDF1.PDF,                      
//            DISP=(NEW,CATLG,DELETE),
//            DCB=(LRECL=256,DSORG=PS,RECFM=LSEQ,BLKSIZE=0)
//*
//SYSOUT   DD SYSOUT=*
//*
//
```

**TXT2PDF2.jcl**

此示例 JCL 使用 DSN 名称进行 TXT2 PDF 转换。

```
//TXT2PDF2 JOB 'TXT2PDF2',CLASS=A,MSGCLASS=X,TIME=1440
//*
//* Copyright Amazon.com, Inc. or its affiliates.* 
//* All Rights Reserved.* 
//*
//*-------------------------------------------------------------------**
//* PRE DELETE*
//*-------------------------------------------------------------------**
//*
//PREDEL  EXEC PGM=IEFBR14
//* 
//DD01     DD DSN=AWS.M2.TXT2PDF2.PDF.VB,                      
//            DISP=(MOD,DELETE,DELETE)
//*
//DD02     DD DSN=AWS.M2.TXT2PDF2.PDF,                       
//            DISP=(MOD,DELETE,DELETE)
//* 
//*-------------------------------------------------------------------**
//* CALL TXT2PDF TO CONVERT FROM TEXT TO PDF (VB)*
//*-------------------------------------------------------------------**
//* 
//STEP01 EXEC PGM=IKJEFT1B
//*
//SYSEXEC  DD DISP=SHR,DSN=AWS.M2.REXX.EXEC
//*
//INDD     DD *
1THIS IS THE FIRST LINE ON THE PAGE 1
0THIS IS THE THIRD LINE ON THE PAGE 1
-THIS IS THE   6TH LINE ON THE PAGE 1
THIS IS THE   7TH LINE ON THE PAGE 1
+____________________________________ - OVERSTRIKE 7TH LINE          
1THIS IS THE FIRST LINE ON THE PAGE 2
0THIS IS THE THIRD LINE ON THE PAGE 2
-THIS IS THE   6TH LINE ON THE PAGE 2 
THIS IS THE   7TH LINE ON THE PAGE 2
+____________________________________ - OVERSTRIKE 7TH LINE                 
/*
//*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD DDNAME=SYSIN
//*
//SYSIN    DD *
%TXT2PDF BROWSE Y IN DD:INDD +
OUT 'AWS.M2.TXT2PDF2.PDF.VB' +
CC YES
/*
//*
//*-------------------------------------------------------------------**
//* CONVERT PDF (VB) TO PDF (LSEQ - BYTE STREAM)*
//*-------------------------------------------------------------------**
//*
//STEP02 EXEC PGM=VB2LSEQ
//*
//INFILE   DD DSN=AWS.M2.TXT2PDF2.PDF.VB,DISP=SHR             
//*
//OUTFILE  DD DSN=AWS.M2.TXT2PDF2.PDF,                      
//            DISP=(NEW,CATLG,DELETE),
//            DCB=(LRECL=256,DSORG=PS,RECFM=LSEQ,BLKSIZE=0)
//*
//SYSOUT   DD SYSOUT=*
//*
//
```

## 修改
<a name="txt2pdf-mods"></a>

为了让 TXT2 PDF 程序在 AWS 大型机现代化 Rocket Software 运行时环境中运行，我们进行了以下更改：
+ 修改源代码以确保与 Rocket Software REXX 运行时兼容
+ 为确保该程序可以同时在 Windows 和 Linux 操作系统上运行而进行了更改
+ 为支持 EBCDIC 和 ASCII 运行时而进行了修改

## 参考
<a name="txt2pdf-ref"></a>

TXT2PDF 参考和源代码：
+ [文本转 PDF 转换器](https://homerow.net/rexx/txt2pdf/)
+ [z/OS免费软件 TCP/IP 和邮件工具](http://www.lbdsoftware.com/tcpip.html)
+ [TXT2PDF 用户参考指南](http://www.lbdsoftware.com/TXT2PDF-User-Guide.pdf)

# M2DFUTIL 批处理实用程序
<a name="m2dfutil"></a>

M2DFUTIL 是一个 JCL 实用程序，提供数据集备份、还原、删除和复制功能，类似于大型机 ADRDSSU 实用程序提供的支持。该程序保留了 ADRDSSU 中的许多 SYSIN 参数，从而简化了迁移到这个新实用程序的过程。

**Topics**
+ [

## 支持的平台
](#m2dfutil-platforms)
+ [

## 平台要求
](#m2dfutil-platform)
+ [

## 计划的未来支持
](#m2udfutil-future-support)
+ [

## 资产位置
](#mdfutil-assets)
+ [

## 在 Amazon EC2（包括 AppStream 2.0）上配置 M2DFUTIL 或 AWS 大型机现代化运行时
](#mdfutil-dependencies)
+ [

## 一般语法
](#mdfutil-syntax)
+ [

## 样本 JCLs
](#mdfutil-sample-jcls)

## 支持的平台
<a name="m2dfutil-platforms"></a>

您可以在以下任何平台上使用 M2DFUTIL：
+ Windows 上的火箭软件（前身为 Micro Focus）ES（64 位和 32 位）
+ Linux 上的火箭软件 ES（64 位）

## 平台要求
<a name="m2dfutil-platform"></a>

M2DFUTIL 依赖于调用脚本来执行正则表达式测试。在 Windows 上，必须安装 Windows Services for Linux (WSL) 才能运行此脚本。

## 计划的未来支持
<a name="m2udfutil-future-support"></a>

目前不可用但未来可用的大型机 ADRDSSU 实用程序功能包括：
+ M2 托管
+ VSAM
+ 对文件重命名的 COPY 支持
+ 对 RESTORE 的 RENAME 支持 
+ 多个 INCLUDE 和 EXCLUDE
+ 通过 DSORG、CREDT、EXPDT 进行子查询的 BY 子句
+ 用于重试入队失败的 MWAIT 子句
+ 对 DUMP/RESTORE 的 S3 存储支持

## 资产位置
<a name="mdfutil-assets"></a>

该实用程序的加载模块在 Linux 上称为 `M2DFUTIL.so`，在 Windows 上称为 `M2DFUTIL.dll`。可在以下位置找到此加载模块：
+ Linux：`/opt/aws/m2/microfocus/utilities/64bit`
+ Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\32bit`
+ Windows（64 位）：`C:\AWS\M2\MicroFocus\Utilities\64bit`

用于正则表达式测试的脚本称为 `compare.sh`。可在以下位置找到此脚本：
+ Linux：`/opt/aws/m2/microfocus/utilities/scripts`
+ Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\scripts`

## 在 Amazon EC2（包括 AppStream 2.0）上配置 M2DFUTIL 或 AWS 大型机现代化运行时
<a name="mdfutil-dependencies"></a>

使用以下内容配置您的 Enterprise Server 区域：
+ 在 **[ES-Environment]** 中添加以下变量
  + `M2DFUTILS_BASE_LOC` - DUMP 输出的默认位置
  + `M2DFUTILS_SCRIPTPATH` - **资产位置**中记录的 `compare.sh` 脚本的位置
  + `M2DFUTILS_VERBOSE` - [VERBOSE 或 NORMAL]。此变量控制 `SYSPRINT ` 输出中的细节级别
+ 验证加载模块路径是否已添加到 `JES\Configuration\JES Program Path` 设置中
+ 验证实用程序目录中的脚本是否具有运行权限。您可以在 Linux 环境中使用 `chmod + x <script name>` 命令添加运行权限

## 一般语法
<a name="mdfutil-syntax"></a>

### DUMP
<a name="mdfutil-dump"></a>

提供将文件从当前编目位置复制到备份位置的功能。此位置当前必须是一个文件系统。

#### 流程
<a name="mdfutil-dump-process"></a>

DUMP 将执行下列操作：

1. 创建目标位置目录。

1. 将该目标位置目录归类为 PDS 成员。

1. 通过处理 INCLUDE 参数来确定要包含的文件。

1. 通过处理 EXCLUDE 参数来取消选择包含的文件。

1. 确定是否对转储的文件执行 DELETED 操作。

1. 将文件入队以待处理。

1. 复制这个文件。

1. 将已复制文件编目的 DCB 信息导出到目标位置中的副文件，以帮助将来执行 RESTORE 操作。

#### 语法
<a name="mdfutil-dump-syntax"></a>

```
DUMP
TARGET ( TARGET LOCATION  )    -
INCLUDE ( DSN. )
[ EXCLUDE ( DSN ) ]
[ CANCEL | IGNORE ]
[ DELETE ]
```

#### 必填参数
<a name="mdfutil-dump-requiredparam"></a>

以下是必需的 DUMP 参数：
+ `SYSPRINT DD NAME` - 用于包含其他日志信息
+ `TARGET` - 目标位置。它可以是：
  + 转储位置的完整路径
  + 在 **M2DFUTILS\$1BASE\$1LOC** 变量中定义的位置中创建的子目录名称
+ `INCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串
+ `EXCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串

#### 可选参数
<a name="mdfutil-dump-optionalparam"></a>
+ CANCEL - 如果出现任何错误，则取消。已处理的文件将被保留
+ （默认）IGNORE - 忽略任何错误并处理直到结束
+ DELETE - 如果未出现 ENQ 错误，则会删除该文件并取消编目

### 删除
<a name="mdfutil-delete"></a>

提供批量删除和取消编目文件的功能。文件未备份。

#### 过程
<a name="mdfutil-delete-process"></a>

DELETE 将执行下列操作：

1. 通过处理 INCLUDE 参数来确定要包含的文件。

1. 通过处理 EXCLUDE 参数来取消选择包含的文件。

1. 将文件入队以待处理。将处置设置为“OLD”、“DELETE”、“KEEP”。

#### 语法
<a name="mdfutil-delete-syntax"></a>

```
DELETE
INCLUDE ( DSN )
[ EXCLUDE ( DSN ) ]
[ CANCEL | IGNORE ]
[ DELETE ]
```

#### 必填参数
<a name="mdfutil-delete-requiredparam"></a>

以下是必需的 DELETE 参数：
+ `SYSPRINT DD NAME` - 用于包含其他日志信息
+ `INCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串 
+ `EXCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串 

#### 可选参数
<a name="mdfutil-delete-optionalparam"></a>
+ CANCEL - 如果出现任何错误，则取消。已处理的文件将被保留 
+ （默认）IGNORE - 忽略任何错误并处理直到结束

### RESTORE
<a name="mdfutil-restore"></a>

提供恢复以前使用 DUMP 备份的文件的功能。除非使用 RENAME 来更改已恢复的 DSNAME，否则文件将恢复到原始编目位置。

#### 流程
<a name="mdfutil-restore-process"></a>

RESTORE 将执行下列操作：

1. 验证源位置目录。

1. 通过处理目录导出文件来确定要包含的文件。

1. 通过处理 EXCLUDE 参数来取消选择包含的文件。

1. 将文件入队以待处理。

1. 未根据其导出信息编目的目录文件。

1. 如果已对文件进行编目并且导出目录信息相同，则当设置了 REPLACE 选项时，RESTORE 将替换编目的数据集。

#### 语法
<a name="mdfutil-restore-syntax"></a>

```
RESTORE
SOURCE ( TARGET LOCATION ) 
INCLUDE ( DSN )
[ EXCLUDE ( DSN ) ]
[ CANCEL | IGNORE ]
[ REPLACE]
```

#### 必填参数
<a name="mdfutil-restore-requiredparam"></a>

以下是必需的 RESTORE 参数：
+ `SYSPRINT DD NAME` - 用于包含其他日志信息 
+ `SOURCE` - 源位置。它可以是：
  + 转储位置的完整路径
  + 在 **M2DFUTILS\$1BASE\$1LOC** 变量中定义的位置中创建的子目录名称
+ `INCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串
+ `EXCLUDE` - 要么是单个命名的 DSNAME，要么是有效的大型机 DSN 搜索字符串

#### 可选参数
<a name="mdfutil-restore-optionalparam"></a>
+ CANCEL - 如果出现任何错误，则取消。已处理的文件已保留
+ （默认）IGNORE - 忽略任何错误并处理直到结束
+ REPLACE - 如果正在恢复的文件已经编目并且目录记录相同，则替换已编目文件

## 样本 JCLs
<a name="mdfutil-sample-jcls"></a>

 **DUMP 作业**

此作业将创建一个名为 `TESTDUMP` 的子目录。这是 **M2DFUTILS\$1BASE\$1LOC** 变量指定的默认备份位置。它将为这个名为 `M2DFUTILS.TESTDUMP` 的备份创建一个 PDS 库。导出的目录数据存储在名为 `CATDUMP.DAT` 的备份目录中的行序文件中。所有选定文件都将复制到此备份目录。

```
//M2DFDMP JOB 'M2DFDMP',CLASS=A,MSGCLASS=X
//STEP001  EXEC PGM=M2DFUTIL
//SYSPRINT DD DSN=TESTDUMP.SYSPRINT,
//        DISP=(NEW,CATLG,DELETE),
//        DCB=(RECFM=LSEQ,LRECL=256)
//SYSIN    DD *
DUMP TARGET(TESTDUMP)               -
     INCLUDE(TEST.FB.FILE*.ABC)     -
 CANCEL
/*
//
```

 **DELETE 作业**

此作业将从目录中删除与 INCLUDE 参数匹配的所有文件。

```
/M2DFDEL JOB 'M2DFDEL',CLASS=A,MSGCLASS=X
//STEP001  EXEC PGM=M2DFUTIL
//SYSPRINT DD DSN=TESTDEL.SYSPRINT,
//        DISP=(NEW,CATLG,DELETE),
//        DCB=(RECFM=LSEQ,LRECL=256)
//SYSPRINT DD SYSOUT=A
//SYSIN    DD *
  DELETE                               -
     INCLUDE(TEST.FB.FILE*.ABC)        -
 CANCEL
/*
 //
```

 **RESTORE 作业**

此作业将从 `TESTDUMP` 备份位置恢复与 INCLUDE 参数匹配的文件。如果编目文件与 CATDUMP 导出中的文件相同，并且指定了 REPLACE 选项，则编目文件将被替换。

```
//M2DFREST JOB 'M2DFREST',CLASS=A,MSGCLASS=X
//STEP001  EXEC PGM=M2DFUTIL
////SYSPRINT DD DSN=TESTREST.SYSPRINT,
//        DISP=(NEW,CATLG,DELETE),
//        DCB=(RECFM=LSEQ,LRECL=256)
//SYSPRINT DD SYSOUT=A
//SYSIN    DD *
RESTORE SOURCE(TESTDUMP)               -
     INCLUDE(TEST.FB.FILE*.ABC)        -
 IGNORE
 REPLACE
/*
//
```

# M2RUNCMD 批处理实用程序
<a name="m2runcmd"></a>

您可以使用批处理实用程序 M2RUNCMD 直接从 JCL 运行 Rocket Software（前身为 Micro Focus）命令、脚本和系统调用，而不必从终端或命令提示符处运行它们。命令的输出将记录到批处理作业的后台处理日志中。

**Topics**
+ [

## 支持的平台
](#m2runcmd-platforms)
+ [

## 在 Amazon EC2（包括 AppStream 2.0）上为 AWS 大型机现代化运行时配置 M2RUNCMD
](#m2runcmd-configure)
+ [

## 样本 JCLs
](#m2runcmd-sample-jcls)

## 支持的平台
<a name="m2runcmd-platforms"></a>

您可以在以下平台上使用 M2RUNCMD：
+ 火箭软件运行时（在亚马逊 EC2 上）
+  火箭软件企业开发者 (ED) 和 Rocket Software 企业服务器 (ES) 产品的所有变体。

## 在 Amazon EC2（包括 AppStream 2.0）上为 AWS 大型机现代化运行时配置 M2RUNCMD
<a name="m2runcmd-configure"></a>

如果您迁移的应用程序在 Amazon EC2 AWS 的大型机现代化运行时上运行，请按如下方式配置 M2RUNCMD。
+ 更改 [Micro Focus JES 程序路径](https://www.microfocus.com/documentation/enterprise-developer/ed80/ED-Eclipse/index.html?t=GUID-BC8A1796-9EDE-48EB-8363-31C9BDE7F96B.html)以包含批处理实用程序的二进制位置。如果您必须指定多个路径，请在 Linux 上使用冒号 (:) 分隔路径，在 Windows 上使用分号 (;) 分隔路径。
  + Linux：`/opt/aws/m2/microfocus/utilities/64bit`
  + Windows（32 位）：`C:\AWS\M2\MicroFocus\Utilities\32bit`
  + Windows（64 位）：`C:\AWS\M2\MicroFocus\Utilities\64bit`

## 样本 JCLs
<a name="m2runcmd-sample-jcls"></a>

要测试安装，您可以使用以下任一示例 JCLs。

 **RUNSCRL1.jcl**

此示例 JCL 创建一个脚本并运行它。第一步创建一个名为 `/tmp/TEST_SCRIPT.sh` 的脚本，其中包含来自 `SYSUT1` 流内数据的内容。第二步设置运行权限并运行第一步中所创建的脚本。你也可以选择只执行第二步来运行已经存在的 Rocket Software 和系统命令。

```
//RUNSCRL1 JOB 'RUN SCRIPT',CLASS=A,MSGCLASS=X,TIME=1440
//*
//*
//*-------------------------------------------------------------------*
//*  CREATE SCRIPT (LINUX)                                           
//*-------------------------------------------------------------------*
//*
//STEP0010 EXEC PGM=IEBGENER
//*
//SYSPRINT DD SYSOUT=*
//SYSIN    DD DUMMY
//*
//SYSUT1   DD *
#!/bin/bash

set -x

## ECHO PATH ENVIRONMNET VARIABLE
echo $PATH

## CLOSE/DISABLE VSAM FILE
casfile -r$ES_SERVER -oc  -ed -dACCTFIL

## OPEN/ENABLE VSAM FILE
casfile -r$ES_SERVER -ooi -ee -dACCTFIL

exit $?
/*
//SYSUT2   DD DSN=&&TEMP,
//            DISP=(NEW,CATLG,DELETE),
//            DCB=(RECFM=LSEQ,LRECL=300,DSORG=PS,BLKSIZE=0)
//*MFE: %PCDSN='/tmp/TEST_SCRIPT.sh'
//*
//*-------------------------------------------------------------------*
//*   RUN SCRIPT (LINUX)                                              *
//*-------------------------------------------------------------------*
//*
//STEP0020 EXEC PGM=RUNCMD
//*
//SYSOUT  DD  SYSOUT=*
//* 
//SYSIN   DD *
*RUN SCRIPT
 sh /tmp/TEST_SCRIPT.sh
/*
//
```

 **SYSOUT**

运行的命令或脚本的输出将写入 `SYSOUT` 日志。对于每个已执行的命令，它都会显示命令、输出和返回代码。

```
************ CMD Start ************   
                                                                                    
CMD_STR: sh /tmp/TEST_SCRIPT.sh                                                                                              
CMD_OUT:                                                                                                                                                                                                                             
+ echo /opt/microfocus/EnterpriseServer/bin:/sbin:/bin:/usr/sbin:/usr/bin    
/opt/microfocus/EnterpriseServer/bin:/sbin:/bin:/usr/sbin:/usr/bin           
+ casfile -rMYDEV -oc -ed -dACCTFIL                                                                       
-Return Code:   0                                                                                                         
Highest return code:    0                                                                                                 
+ casfile -rMYDEV -ooi -ee -dACCTFIL                                                                     
-Return Code:   8                                                                                                         
Highest return code:    8                                                                                                 
+ exit 8                                                                                                                  

CMD_RC=8                                                                                                                  

************  CMD End  ************
```

 **RUNCMDL1.jcl**

此示例 JCL 使用 RUNCMD 来运行多个命令。

```
//RUNCMDL1 JOB 'RUN CMD',CLASS=A,MSGCLASS=X,TIME=1440
//*
//*
//*-------------------------------------------------------------------*
//*   RUN SYSTEM COMMANDS                                             *
//*-------------------------------------------------------------------*
//*
//STEP0001 EXEC PGM=RUNCMD
//*
//SYSOUT  DD  SYSOUT=*
//* 
//SYSIN   DD *
*LIST DIRECTORY
 ls
*ECHO PATH ENVIRONMNET VARIABLE
 echo $PATH
/*
//
```