Table of Contents

概要

  • ファイル名の正規化
  • カレントディレクトリのファイル名をルールに従って正規化する。
  • 正規化したいファイルを選択した後、SendTo から呼び出す。
    perl.exe {fullpath}\normFileName.pl
  • 空白 -> _
  • _v/r. -> _v/r ("v"または"r"に続く"."を削除。ただし拡張子の前の"."だったら削除しない)
  • エラー時にメッセージを表示するようにした。(2012/07/13)

ソース

  • normFileName.zip
    # normFileName.pl
    # ファイル名を正規化する。
    # 空白 -> _
    # _v/r. -> _v/r ("v"または"r"に続く"."を削除。ただし拡張子の前の"."だったら削除しない)
    
    use strict;
    use warnings;
    use utf8;
    use Encode;
    use File::Basename;
    use Term::ReadKey;
    
    my $charset = 'CP932';
    
    binmode( STDIN,  ":encoding($charset)" );
    binmode( STDOUT, ":encoding($charset)" );
    binmode( STDERR, ":encoding($charset)" );
    
    @ARGV = map{ decode( $charset, $_ ); } @ARGV;
    
    my @Ext = map{ ".$_" } qw( pdf zip mbs htm html txt doc docx xls xlsx mdb accdb ppt pptx );
    
    foreach my $fileNameIn ( @ARGV ){
    	my( $name, $path, $suffix ) = fileparse( $fileNameIn, @Ext );
    	if ( $suffix ){
    		my $fn2 = $name;
    		$fn2 =~ s/\s+/_/g;
    		$fn2 =~ s/_+/_/g;
    		$fn2 =~ s/(_[vr])\./$1/ig;
    		$fn2 =~ s/(_[vr])[-\.](\d+)[-\.](\d+)/$1$2.$3/ig;
    		if ( $name ne $fn2 ){
    			print( "old: ${name}${suffix}\nnew: ${fn2}${suffix}\n" );
    			rename( encode( $charset, $fileNameIn ), encode( $charset, $path . $fn2 . $suffix ) )
    				or print( "${name}${suffix}: $!\n" );
    			print( "\n" );
    		}
    	}
    }
    
    warn( "Hit Enter.\n" );
    ReadKey(0);
    
    # EOF

リンク