指定ディレクトリのファイルの連番を、一括リネームする処理
お世話になります。
@で区切られた以下のようなファイル名の連番(Number)をリネーム処理しようとしています。
Name1@Code1@Name2@Code2@Code3@Number1@Number2@Ver.txt
Number1、Number2は3桁表示の連番で、Number1の連番を1つ大きいものにし、Number2は"001"に戻します。
よって、次のようになればOKです。
元:Name1@Code1@Name2@Code2@Code3@003@002@Ver.txt
→Name1@Code1@Name2@Code2@Code3@004@001@Ver.txt
そこで、このようなコードを書いてみました。
#!/usr/bin/perl
use File::Copy;
my $dir = "./";
opendir DH,$dir or die;
my @file = readdir DH;
foreach my $file(@file){
next if $file =~ /^\.{1,2}$/;
@fact = split /\@/,$file;
$rep = sprintf("%03d",$fact[5]+1);
$Origine = "$fact[0]\@$fact[1]\@$fact[2]\@$fact[3]\@$fact[4]\@$fact[5]\@$fact[6]\@$fact[7]";
$Replace = "$fact[0]\@$fact[1]\@$fact[2]\@$fact[3]\@$fact[4]\@$rep\@001\@fact[7]";
# print "前 : $Origine\n";
# print "後 : $Replace\n";
move( $Origine,$Replace );
}
closedir DH;
printさせて確認する限りではうまく動いているのですが、肝心のリネームの方は、1つのファイルしか処理されません。
何かご指摘頂けると幸いです。
また、同じ処理できれいなコードの書き方(方法)があれば教えてください。
初心者にはこのようなコードしか思いつきませんでしたので・・・
宜しくお願い致します。