我的perl脚本没有看到txt文件

时间:2016-06-20 21:06:58

标签: windows perl unc

My Perl程序创建文件

 10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.txt     

然后在方法中我有一个代码:

if ( -e $report ) {     
    # we parse the filet here is some code, at the end     
{     
else     
}     
    print "*** Skipping \\NYNAS\NYNDS\VOL\DATA\INVACCT\FUND_RECS_PFI\10001.ICNTL.20160603.PROD.GAAP.PFI\10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.TXT        
}     

我无法理解脚本为什么看不到该文件。我已经多次逐字检查了它。可能是因为大写TXT,但实际上它是小写的吗?

1 个答案:

答案 0 :(得分:2)

您的文件10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.txt在目录\\NYNAS\NYNDS\VOL\DATA\INVACCT\FUND_RECS_PFI中吗?

猜测你没有正确转义文件路径。即使您使用单引号,也无法在Uniform Naming Convention (UNC) paths中表示两个前导反斜杠,而无法转义其中至少一个

检查print $report, "\n"的输出,看看你真正写的是什么

我的偏好是在路径字符串的开头使用四个反斜杠,就像这样

my $report = '\\\\NYNAS\NYNDS\VOL\DATA\INVACCT\FUND_RECS_PFI\10001.ICNTL.20160603.PROD.GAAP.PFI\‌​10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.TXT';

print -e $report ? "Found\n" : "Not found\n";

Perl允许您在Windows路径中使用转发斜杠代替反斜杠,因此如果您愿意,可以编写此代码,但这样的路径在其他Windows中无效软件

my $report = '//NYNAS/NYNDS/VOL/DATA/INVACCT/FUND_RECS_PFI/10001.ICNTL.20160603.PROD.GAAP.PFI/‌​10001.ICNTL.20160602.20160603.OPR.GAAP.PROD.PFI.PRE.TXT';

或者另一种方法是重新定位当前的工作目录。您无法在Windows命令行上cd到UNC路径,但Perl允许您成功chdir

chdir '//NYNAS/NYNDS/VOL/DATA/INVACCT/FUND_RECS_PFI' or die $!;

此后,所有相对文件路径将相对于联网系统上的这个新工作目录