我正在编写一个简单的脚本来重命名&将文件移到一个新目录中。我似乎无法让它正常工作,基本上,如果已经创建了文件夹,只有当文件被重命名时,它才会将文件移动到它中,如果文件夹已经被创建,但是文件需要重命名,它就不能工作,它只会重命名文件并给我一个错误,因为它无法移动文件。如果需要创建文件夹并将文件重命名,它将创建该文件夹并重命名文件,但它将无法移动它们。所以我真的有点迷茫了。
http://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 argument\n";
}
if (defined $movie and defined $season and defined $cont) {
print "\n\nProcessing $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 "\n\n$ind files processed successfully !";
}
}发布于 2015-06-24 22:46:05
问题是要重命名文件,然后移动它们,但是在重命名文件之后,文件在@files数组中不再以旧名称存在。
您可以使用mv更改文件名,并将其放入新目录。换句话说,您可以调用
mv 'movie.title.s01.e08.(2008).[1080p].mkv', 'Saison 01/Movie TitleS01E08.mkv'这大大简化了你的程序。如果新目录不存在,只需创建它,然后为mv $f, "$npath/$flast"中的每个名称调用@files
https://stackoverflow.com/questions/31037688
复制相似问题