im正在编写一个简单的脚本来重命名&将文件移到新目录中。我似乎无法正常工作,基本上,如果文件夹已经创建,它只会在重命名文件的情况下将文件移动到文件夹中,如果文件夹已创建,但需要重命名文件,它将无法工作,它只是重命名文件,并给我一个错误,因为它无法移动文件。如果需要创建文件夹和重命名文件,它将创建文件夹并重命名文件,但无法移动它们。所以我真的有点迷路了。。
https://i.stack.imgur.com/v8smp.jpg
我一直在尝试很多不同的方法,但最终都不起作用,或者给了我同样的结果。我认为我做错了什么,这是我的代码:
use strict;
use warnings;
use File::Copy qw(mv);
my ($movie, $season, $cont) = @ARGV;
if (not defined $movie) {
die "need a name as first argumentn";
}
if (defined $movie and defined $season and defined $cont) {
print "nnProcessing $movie season $season with container .$cont :n";
my $npath = "Saison "."$season";
my $exist = 0;
my $num = 1;
my $ind = 0;
my $flast = undef;
my $rpath = undef;
my @files = glob("*.$cont");
my @all = glob('*');
foreach my $f (@files) {
if ($f =~ m/e([0-1_-] ?)Q$num/i or $f =~ m/episode([0-1_-] ?)Q$num/i) {
$flast = "$movie.S$season"."E$num.$cont";
rename($f, $flast) or die "nError while renaming $f !";
$num++;
}
}
if (-d "$npath") {
$exist = 1;
print "n$npath";
}
else {
mkdir($npath) or die "nError while making new directory";
$exist = 1;
}
sleep(1);
if ($exist == 1) {
foreach my $f (@files) {
$npath = "Saison "."$season/$f";
mv($f, $npath) or die "nError while moving $f";
print "n$f done !";
$ind++;
}
print "nn$ind files processed successfully !";
}
}
问题是重命名文件,然后移动它们,但重命名后,文件在@files
阵列中不再以旧名称存在
您可以使用mv
更改文件名,也可以将其放入新目录。换句话说,你可以调用
mv 'movie.title.s01.e08.(2008).[1080p].mkv', 'Saison 01/Movie TitleS01E08.mkv'
这大大简化了您的程序。如果新目录不存在,您只需要创建它,然后为@files
中的每个名称调用mv $f, "$npath/$flast"