2

У меня есть много папок, которые должны быть переименованы на основе правил пары. пример папок:

-- Some.Folder.Name.Today.2009
-- Another.messed.Up.folder.1980
-- Third.messed.Up.folder.1980

Я хотел бы посмотреть, есть ли у кого-нибудь быстрый скрипт для переименования каждой папки, чтобы удалить точку (.) Из имени папки, а также поставить круглые скобки вокруг года, чтобы это выглядело так

-- Some Folder Name Today (2009)
-- Another messed Up folder (1980)
-- Third messed Up folder (1980)

Большое спасибо!

3 ответа3

1

Я бы предложил запустить имена файлов с помощью короткого сценария sed. for file in dir/with/files/*; do name=$(basename "$file" | sed 's/\./ /g;s/\([12][09][0-9][0-9]\)/(\1)/'); mv "$file" "$(dirname \"$file\")/$name"; done Заменяет точки пробелами, затем окружает год круглыми скобками.

Убедитесь, что если вы сканируете / работаете с этими файлами, они правильно указаны в кавычках. Пробелы часто используются в качестве разделителей между элементами.

1

Perl хорошо с этим справляется, этого должно быть достаточно:

use warnings;
use strict;
use File::Copy;

my $oldname;

opendir(my $d, ".") or die $!;
while(readdir $d) {
    if (-d $_ and $_ ne "." and $_ ne "..")
    {
        $oldname = $_;
        $_ =~ s/\./ /g;
        $_ =~ s/(\d{4})/($1)/g;
        move($oldname,$_);
    }
    }
closedir $d;

Только проверенный кратко, не стесняйтесь гольф / изменить его! Это не идеально ни в коем случае. Взломали это вместе быстро;)

Примечание. В текущем состоянии следует запустить форму внутри каталога с искаженными именами папок.

C:\Users\John\Desktop\folders>dir
 Volume in drive C has no label.
 Volume Serial Number is 8888-1666

 Directory of C:\Users\John\Desktop\folders

29/01/2011  07:14 PM              .
29/01/2011  07:14 PM              ..
29/01/2011  07:07 PM              some.folder.name.2008
29/01/2011  07:07 PM              some.folder.name.2009
29/01/2011  07:16 PM               282 ren.pl
               1 File(s)            282 bytes
               4 Dir(s)  53,349,425,152 bytes free

C:\Users\John\Desktop\folders>ren.pl

C:\Users\John\Desktop\folders>dir
 Volume in drive C has no label.
 Volume Serial Number is 8888-1666

 Directory of C:\Users\John\Desktop\folders

29/01/2011  07:16 PM              .
29/01/2011  07:16 PM              ..
29/01/2011  07:07 PM              some folder name (2008)
29/01/2011  07:07 PM              some folder name (2009)
29/01/2011  07:16 PM               282 ren.pl
               1 File(s)            282 bytes
               4 Dir(s)  53,349,425,152 bytes free
1

В PowerShell (который, по моему мнению, установлен по умолчанию в Win7, хотя у меня нет компьютера с Windows, поэтому я могу ошибаться),

gci *.* | %{
 mi $_ ($_.name.replace('.', ' ').insert($_.name.lastindexof('.')+1, '(')+')')
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .