2013-04-22 113 views
0

有什麼理由爲什麼以下構造不起作用?文件列表包含文件名稱。名稱列表包含一個名稱列表,這些名稱在作爲子字符串與文件名相匹配時,會導致循環將文件移動到名爲$ name的目錄。它似乎應該工作,但它不是在移動文件。什麼是更好的方式來構建這個?將文件移動到目錄

FILE: for my $file (@file_list) { 

    for my $name (@name_list) { 

    if ($file =~ /^\Q$name\E/) { 
     rename "/Users/path/to/file/I/need/to/move/$file", "/Users/path/to/directory/i/need/to/move/file/to/$name/$file" or die "rename failed because: $!\n"; 
    next FILE; 
    } 
    } 
    print "no match for $file\n"; 
} 
+0

什麼語言是您使用? – 2013-04-22 00:26:48

+0

@ChrisLoonam看起來像PHP – alfasin 2013-04-22 00:27:45

+0

這看起來更像Perl而不是PHP(''我的$ var'和'=〜'是符號之一)。 – michaelb958 2013-04-22 00:29:59

回答

0

權代碼:

for my $file (@file_list) { 
    my $found = 0; 
    for my $name (@name_list) { 
    if ($file =~ /^\Q$name\E/) { 
     print "failed to rename $file\n" unless rename "/Users/path/to/file/I/need/to/move/$file", "/Users/path/to/directory/i/need/to/move/file/to/$name/$file"; 
     $found = 1; 
     last; 
    } 
    } 
    print "no match for $file\n" unless $found; 
} 
+0

爲什麼@Jack這是一個更好的表述? – ES55 2013-04-22 01:17:58

+0

如果沒有找到文件,你的代碼將退出(用die重命名),但是這將繼續並打印錯誤消息... – Jack 2013-04-22 01:19:54

+0

其實,我也以這種方式獲得了很多「無法重命名......」。是的,該計劃繼續,這是很好的。但這些文件仍然不動。 grr .... – ES55 2013-04-22 01:20:03