我正在尝试编写一个perl脚本(如下),以自动将源文件从Windows上传到z / OS(又名MVS或OS / 390)。 put()方法似乎在z / OS上为远程数据集(文件)名称加上我登录时使用的用户名(“ JCARTER”)的前缀。我要上传到的远程数据集名称是“ FSI.V121P01.INSTALL”,它是分区数据集(PDS)。目标数据集名称以“ JCARTER”为前缀会导致找不到数据集,并且put()失败。我已经尝试了用多种方式引用目标文件名,但是我的用户名仍然位于文件名的前面。我也尝试使用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)请求不存在的分区数据se
t。使用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 - 将perl FTP传输到z/OS,以防止将userid附加到目标文件名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13826136/

10-12 13:38