0

我正在尝试使用用户定义目录中的文件名填充两个数组。如果文件位于我运行程序的同一目录中,则我到目前为止的代码有效。此代码的最终目标是使用脚本将文件从一种格式转换为另一种格式,并将新转换的文件导出到用户定义的目录中。

# Get export directory
my $export_dir = $ARGV[0]."\\";

print "Export Directory: \"$export_dir\"\n\n" if DEBUG;

# Get current working directory
my $cwd_dir =  getcwd;

# Replace slashes with back-slashes for Windows compatibility
$cwd_dir =~ s/\//\\/g;

print "Current Working Directory: \"$cwd_dir\"\n\n" if DEBUG;


# Get list of ZIP files in directory
my @zip_files = glob "*.zip";

当 zip 文件位于当前工作目录中时,此代码有效。如何让它在 zip 文件位于用户定义的目录中时工作?(在这种情况下是一个子文件夹,但应该是用户定义导出目录的任何位置)。

4

2 回答 2

1

只需将目录名称附加到 glob 规范:

my @zip_files = glob "$export_dir\\*.zip";

PS 理想情况下,您应该使用File::SpecCPAN 模块以独立于操作系统的方式构建文件路径,而不是"\\"为 Windows 和"/"Unix 进行硬编码。

于 2013-06-20T17:04:27.313 回答
0

你显然想要

my @zip_files = do { eval { chdir $export_dir } or die $!; my @x = glob "*.zip"; chdir $cwd_dir; @x };

或者,为了少一点矫枉过正(如果$export_dir不是有效的目录,则返回空列表,

my @zip_files = eval { chdir $export_dir or die; my @x = glob "*.zip"; chdir $cwd_dir; @x };
于 2013-06-20T17:23:35.357 回答