Сценарий для чистки имен папок

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

-- 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)

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

2
задан 08.10.2014, 15:45

3 ответа

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
ответ дан 08.12.2019, 07:27

Я предложил бы выполнить имена файлов через короткий 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
ответ дан 08.12.2019, 07:27

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

gci *.* | %{
 mi $_ ($_.name.replace('.', ' ').insert($_.name.lastindexof('.')+1, '(')+')')
}
1
ответ дан 08.12.2019, 07:27

Теги

Похожие вопросы