ファイル名一括変更
use strict; use warnings; ### カレントディレクトリのファイル一覧を取得する。 # glob print "1: カレントディレクトリのファイル一覧を取得する。\n"; my @all_files = glob "*"; # * は、. で始まらないすべてのファイルを表現 print join( "\n", @all_files ), "\n\n"; print "2: .txt で終わるファイル一覧を取得する。\n" ; my @text_files = glob "*.txt"; print join( "\n", @text_files ), "\n\n"; #-- スカラー変数として処理 --# my $count = @text_files; print $count, "個のファイルが存在します。\n"; my @rename=(1..$count);//1~$countの連番に名前を変更 my $i=0; while($i<$count){ @rename[$i]= @rename[$i].'.txt'; #print @rename[$i],"\n"; if (-e $rename[$i]) { print "ファイル$rename[$i]は存在するので、変更できません。\n"; } else { print "ファイル$rename[$i]は存在しません。\n"; print "[@text_files[$i]]を[@rename[$i]]に変更します。\n"; rename @text_files[$i], @rename[$i]; } print "\n"; $i++; } __END__
私がいかに素人かわかるだろう。
if (-e $rename[$i])
の処理がないと、renameしたときに、同じファイル名のファイルが存在していたら、既にあるファイルを削除される。
まだ、while文の中を変えないと、ダメだね。