0

我正在尝试\\\server\folder\folder\folder\filename.csv根据用户输入的文件名打开位于的文件。该文件将始终为 csv 文件,但名称会因部门而异。该目录将始终相同,但它不是 Perl 所在的目录。

我在尝试打开文件时遇到问题。我尝试创建 2 个变量,1 个用于目录,1 个用于文件名,但是当我尝试打开$directory\\$FileName. 我尝试使用硬编码的目录和文件名变量来执行 open 语句,但 Perl 认为该变量是文件名的一部分(这是有道理的)。这甚至可能吗?

打开文件后,我要运行代码,该代码将编辑文件本身(这工作正常),然后我想将文件保存在新位置。这个新位置与目录相同,但我想向它添加另一个文件夹级别,然后添加相同的文件名。一种“更改前”文件位置和“更改后”文件位置。

print "What is your FULL file name going to be with extension included?";
my $fileInName = <>; 
my $@dirpath= '\\\\Server\\Folder1\\Folder2\\Folder3\\Folder4\\Sorted_files\\';
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || 
    Win32::OLE->new('Excel.Application', 'Quit'); 
my $Book = $Excel->Workbooks->Open($directory $file); 
my $Sheet = $Book->Worksheets(1);
$Sheet->Activate(); 

这就是我现在拥有的代码。我也尝试了以下方法:

my $@dirpath= '\\\\server\\folder1\\folder2\\folder3\\call_folder4\\Sorted_files\\$fileName';

当然,我收到“找不到文件错误:

如果我对整个路径名进行硬编码,我的文件打开效果很好,但我不想有 25 个单独的脚本,唯一的区别是文件名。

4

2 回答 2

0

使用file::spec模块。它是可移植的,您不必担心在路径中转义斜杠字符(更新:大部分是正确的,但在这种情况下,您仍然需要转义服务器引用,如下所示,在分配给@dirpath)。

例如:

use File::Spec::Functions;

# get users file from the cmd line arg
my $usersfile = $ARGV[0];

my @dirpath = qw/\\\server folder folder folder/;
my $filepath = catfile(@dirpath,$userfile);

# test existence
die "file does not exist" unless(-e $filepath);
于 2012-10-15T19:50:31.217 回答
0
my $@dirpath= '\\Server\Folder1\Folder2\Folder3\Folder4\Sorted_files\';
my $Book = $Excel->Workbooks->Open($directory $file); 

甚至不编译。它应该是:

my $dirpath = '\\\\Server\Folder1\Folder2\Folder3\Folder4\Sorted_files';
my $Book = $Excel->Workbooks->Open("$dirpath\\$file"); 
于 2012-10-15T20:59:25.710 回答