我正在尝试根据文件名的用户输入打开位于\\\server\folder\folder\folder\filename.csv
的文件。该文件将始终为csv文件,但名称将根据部门而不同。该目录将始终相同,但它不是Perl所在的目录。
我在尝试打开文件时遇到问题。我试图制作2个变量,1个用于目录,1个用于文件名,但是当我尝试打开$directory\\$FileName
时,我只是遇到了错误。我试图用硬编码的目录和文件名变量做一个开放语句,但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个单独的脚本,唯一的区别就是文件名。
答案 0 :(得分: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);
答案 1 :(得分: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");