INFINITY -数学とかプログラミングとか-

統計とプログラムを使って役に立たせたい

TeX用コマンド入力を支援するための辞書をご利用ください。
sanctuary's blogは,適当なことが書いてあります。

ファイル名一括変更

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文の中を変えないと、ダメだね。