2013-04-22 3 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

Какой язык вы используете? –

+0

@ChrisLoonam выглядит как PHP – alfasin

+0

Это больше похоже на Perl, чем на PHP (для моих $ var и '= ~' являются одними из знаков). – michaelb958

ответ

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

Почему, @ Джек, это лучшая формулировка? – ES55

+0

Если файл не найден, ваш код выйдет (переименуйте с die), но это будет продолжаться и выведет сообщение об ошибке ... – Jack

+0

На самом деле, я получаю много «неудачных переименований ...» таким же образом. Да, программа продолжается, и это хорошо. Но файлы еще не двигаются. grr .... – ES55

Смежные вопросы