我正在尝试编写一个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/