2013-06-20 20 views
0

我想用用戶定義的目錄中的文件名填充兩個數組。如果這些文件位於運行該程序的相同目錄中,那麼至今爲止我的代碼都有效。此代碼的最終目標是使用腳本將文件從一種格式轉換爲另一種格式,並將新轉換的文件導出到用戶定義的目錄中。perl使用用戶定義目錄中的文件名填充數組?

# 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文件在用戶定義的目錄中工作? (在這種情況下,一個子文件夾,但應該在用戶定義導出目錄的任何地方)。

+0

你並不需要更換斜線'/'帶反斜槓'''讓你的腳本與Windows兼容:Windows可以理解路徑中的斜槓。試試看看。 – TLP

回答

1

只需預先掛起的目錄名的水珠規格:

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

附:理想情況下,您應該使用File::Spec CPAN模塊以獨立於操作系統的方式構建文件路徑,而不是硬編碼用於Windows的"\\"和用於Unix的"/"

+0

如果使用包含空格的路徑,比如'Documents and settings',那麼你需要小心,因爲它們會不適用於glob。 – TLP

+0

@TLP - 是的,'Fil e :: Find'會是一個更可靠的解決方案 – DVK

+0

感謝球員們,這似乎奏效了。現在唯一的問題是它以後會導致更多的問題。當檢查文件是否存在時,你知道如何指定目錄嗎?我正在使用if(-e $ zip_file),但只檢查當前目錄,而不是用戶指定的目錄。 – odoc

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 }; 
+1

這是一個明顯的矯枉過正的案例。 – TLP

+0

它不是(恕我直言)作爲矯枉過正不得不拉扯'File :: Spec'(我承認,這是一個可靠的解決方案)。 :D – Massa

+0

我指的是你可以簡單地做'glob'$ export_dir/*。zip「'。 – TLP