perl FTP 到 z/OS,防止将用户标识添加到目标文件名

标签 perl ftp zos

我正在尝试编写一个 perl 脚本(如下)来自动将源文件从 Windows 上传到 z/OS(也称为 MVS 或 OS/390)。 put() 方法似乎在 z/OS 上的远程数据集(文件)名称前加上我登录时使用的用户标识(“JCARTER”)。我要上传到的远程数据集名称是“FSI.V121P01.INSTALL”,它是一个分区数据集 (PDS)。带有“JCARTER”的目标数据集名称前缀导致找不到数据集并且 put() 失败。我尝试了不同的方式来引用目标文件名,但我的用户 ID 仍然附加在文件名之前。我也尝试过使用 cwd() 设置 cwd,使用 quote('SITE', 'QUOTESOVERRIDE') 和 quote('SITE', 'DATASETMODE'),但仍然没有成功。

这是脚本:

use strict;
use Net::FTP;

my $HostIP="xxx.xxx.xxx.xxx";
my $ftp;

$ftp = Net::FTP -> new ($HostIP) or die "Cannot connect to zOS: $@";
$ftp->login("userid","pw") or die "Cannot login.", $ftp->message;
$ftp->ascii();

#$ftp->cwd();
#$ftp->quot('SITE', 'QUO');
#$ftp->quot('SITE', 'DATAS');
print $ftp->message;
$ftp->pwd();
print $ftp->message;
$ftp->put('J:\REL122\RPS100\A2WBLIB\C\a2wversn.c', 'FSI.V121P01.INSTALL(A2WVERSN)');
print $ftp->message;
$ftp->quit;

运行上面的程序会产生下面的消息:

表示类型为 Ascii NonPrint “'JCARTER.'”是工作目录。 JCARTER.FSI.V121P01.INSTALL(A2WVERSN) 请求一个不存在的分区数据集 吨。使用MKD命令创建。

当我尝试添加 cwd("") 以删除当前工作目录时,我得到:

表示类型为 Ascii NonPrint “'JCARTER.'”是工作目录。 “/”是 HFS 工作目录。 存储数据集/FSI.V121P01.INSTALL(A2WVERSN) /FSI.V121P01.INSTALL(A2WVERSN) 打开失败。

看来我已经很接近了。有什么建议么 ?谢谢 - 约翰

最佳答案

听起来好像当您通过 FTP 连接时,它会将您放入的数据集根据您的用户名命名为“JCARTER”。

你试过用cdup()把你从那个JCARTER命名的数据集中取出来吗?然后您可以 cwd() 进入 FSI.V121P01.INSTALL PDS。

如果这不起作用,您可能只想建立连接,运行 dir() 并查看 Net::FTP 为您返回的内容。这可能会使事情在逻辑上更易于导航。

关于perl FTP 到 z/OS,防止将用户标识添加到目标文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13826136/

相关文章:

java - 通过 Python 或 Perl 客户端执行 java 方法

perl - 动态函数注入(inject)到 Text::Template 命名空间

javascript - 在 Vue.js 中将文件上传到 ftp 服务器

c# - 为什么我在使用 IPv6 URI 时得到 'System.UriFormatException: Invalid URI: Invalid port specified.'?

mainframe - 用于打开、关闭、读取和将文件写入磁带驱动器的 REXX 命令是什么?

perl - 构建相当小的脚本

Perl 依赖树求解器

PHP通过FTP下载整个文件夹(递归)

panel - ISPF 面板 REXX 中是否提供 ISPEXEC 服务?

windows - 编写一个小的 Windows 脚本来与大型机和/或 Endevor 对话