-2

我需要大量重命名的文件夹中有 519 个 JPG 文件。在文件 newnames.txt 中,我列出了 519 个新文件名。有没有办法通过命令行或 perl 来运行该名称列表(每个都在一个新行上)并重命名所有文件?

4

1 回答 1

0

由于您没有指定如何将文件名映射到“newnames.txt”数据,我将给出几个解决方案:

如果文件名按字母顺序排序,并且新名称的顺序对应于该顺序:

use File::Slurp; 
use File::Copy qw/move/;
my @newnames=read_file("newnames.txt");
chomp(@newnames);
my @files = glob("*.JPG");
for (my $i=0; $i < @files; $i++) {
    die "Not enough new names for file $files[$i]" unless $newnames[$i];
    move($files[$i], $newnames[$i])
          or die "Failed to move $files[$i] to $newnames[$i] : $!";
}

如果文件名与新名称位于同一文件中,则在 2 列中:

use File::Slurp; 
use File::Copy qw/move/;
my @newnames=read_file("newnames.txt");
chomp(@newnames);
foreach my $line (@newnames) {
    my ($file, $new)= split(/,/, $line);
    move($file, $new)
          or die "Failed to move $file to $new : $!";
}
于 2013-05-03T17:54:27.680 回答