用Perl从网络驱动器读取文件
我正在编写一个perl脚本,它从网络上的某个根目录开始,为所有目录中的PDF编制文档清单。脚本在本地运行良好,但我无法让它从网络驱动器读取文件。我有草莓 这是我代码的开始用Perl从网络驱动器读取文件,perl,networking,drive,file-find,Perl,Networking,Drive,File Find,我正在编写一个perl脚本,它从网络上的某个根目录开始,为所有目录中的PDF编制文档清单。脚本在本地运行良好,但我无法让它从网络驱动器读取文件。我有草莓 这是我代码的开始 use strict; use Excel::Writer::XLSX; use Cwd; use Tk; use File::Find; my @analystreports; my @directories; 我使用TKGUI获取目录 my $homeDir = Tk::MainWindow->new->
use strict;
use Excel::Writer::XLSX;
use Cwd;
use Tk;
use File::Find;
my @analystreports;
my @directories;
我使用TKGUI获取目录
my $homeDir = Tk::MainWindow->new->chooseDirectory;
find(\&grabPDF, $homeDir);
sub grabPDF {
my $file = $_;
if ($file =~ /\.pdf/g) {
push @analystreports, $File::Find::name;
}
}
捕获当前目录中的所有文件和文件夹
my $homeDir = Tk::MainWindow->new->chooseDirectory;
find(\&grabPDF, $homeDir);
sub grabPDF {
my $file = $_;
if ($file =~ /\.pdf/g) {
push @analystreports, $File::Find::name;
}
}
我的网络驱动器在网络使用中看起来像这样
本地N:Remote\abc-file-01\共享数据
请原谅我的初学者代码。我的问题是,我的网络驱动器是否有问题,或者我是否必须向管理员请求权限。谢谢你,丹。开车就是开车。您可以传递以下任意字符串:
N:\
n:\
N:/
n:/
你甚至可以传递UNC的名字
\\abc-file-01\shared data
//abc-file-01/shared data
当然,您可能需要使用一些转义来构建字符串
"N:\\"
"N:/"
"n:\\"
"n:/"
"\\\\abc-file-01\\shared data"
"//abc-file-01/shared data"
但这可能不相关,因为您似乎是从Tk获取字符串,而不是构建它
你的代码中有一个bug
if ($file =~ /\.pdf/g) {
应该是
if ($file =~ /\.pdf/) {
很可能
if ($file =~ /\.pdf\z/) {
g
在这里毫无意义,可能会导致问题(尽管我认为您的特定代码不会受到影响)。摆脱g
当你说你不能让它读取文件时,那是什么意思?你收到错误信息了吗?如果是,错误消息是什么?我也不明白你所说的“我的网络驱动器看起来像这样…”是什么意思,你能澄清一下吗?是否将网络驱动器映射到本地驱动器号?当然,网络驱动器映射到字母n。此外,该程序只是无休止地运行。没有错误消息。我感激你的无奈,还是很长时间?你正在根据你说的扫描整个驱动器。那可能需要一段时间!这是无止境的。所花的时间毫无意义。我只是在看一个文件夹。我的本地计算机上有相同的文件夹,它可以在半秒钟内工作。该文件夹有任何文件夹或符号链接吗?您正在递归搜索。为什么不将warn($\ux)
添加到回调子节点以跟踪其进度?chooseddirectory
返回什么?感谢您的帮助。为什么你认为它需要逃走而不是当地人?我试过所有其他的组合。谢谢你对g的建议。我的意思是,当我选择硬盘上的任何文件夹时,他们的编码方式都是有效的。只是不在网络驱动器上。如果是这样的话,我不明白为什么我必须改变路径的格式化方式。你不明白。路径根本不应该更改。非常感谢您的帮助。你让我添加警告(美元)是对的,只是在网络上花了很长时间!