清理文件夹名称的脚本

清理文件夹名称的脚本

我有很多文件夹需要根据一些规则进行重命名。文件夹示例:

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

多谢!

答案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
 驱动器 C 中的卷没有标签。
 卷序列号为 8888-1666

 C:\Users\John\Desktop\folders 目录

2011 年 1 月 29 日下午 7:14。
2011 年 1 月 29 日下午 7:14 ..
2011 年 1 月 29 日下午 7:07 某个文件夹名称.2008
2011 年 1 月 29 日下午 7:07 某个文件夹名称.2009
2011 年 1 月 29 日 下午 7:16 282 ren.pl
               1 个文件 282 字节
               4 个目录 53,349,425,152 字节可用

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

C:\Users\John\Desktop\folders>dir
 驱动器 C 中的卷没有标签。
 卷序列号为 8888-1666

 C:\Users\John\Desktop\folders 目录

2011 年 1 月 29 日下午 7:16。
2011 年 1 月 29 日下午 7:16 ..
2011 年 1 月 29 日下午 7:07 某些文件夹名称 (2008)
2011 年 1 月 29 日下午 7:07 某些文件夹名称 (2009)
2011 年 1 月 29 日 下午 7:16 282 ren.pl
               1 个文件 282 字节
               4 个目录 53,349,425,152 字节可用

答案2

我建议通过一个简短的 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用空格替换点,然后用括号括起年份。

确保在扫描/操作这些文件时,它们被正确引用。空格通常用作项目之间的分隔符。

答案3

电源外壳(我相信它是在 Win7 上默认安装的,但我没有 Windows 机器,所以我可能是错的),

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

相关内容