ご無沙汰してます。
Microsoft Windows Xp Professional 2002 Service Pack 2
Activeperl 5.8.8_build820
スクリプトを shift-jisで書いてます。
perl/tk でファイル(ディレクトリ)を読込んで
chdir($drc) しようと思うのですが、ディレクトリに日本語が
入っていると、ディレクトリに移動したり、ファイルが読込めません。
Googleで検索して、色々見ているのですが、参考になるものを
探しきれていません。
情報のポインタでも教えて頂けると幸いです。
久しぶりの発言がこんなので済みませんが。。。
参考でスクリプトを付けておきます。。。
#----------------------------------
# This script is worted shift-jis
# use ActiveState perl 5.8.8_build820
use Tk;
use Encode qw(from_to encode decode);
use encoding "shift-jis" ,Filter=>1;
#------------------------------------------------------------------
$types = [['変更可能ファイル',['.jpg','.xls','doc',],],['全て','*'],];
#------------------------------------------------------------------
$mw = MainWindow->new;
$title ="ファイルズツールズ";# from_to($title,'shiftjis','utf8',);
$mw->title($title);
$but10 = $mw->Button(
-text => "00:Exit!",
-anchor => 'center',
-font => "{MS 明朝} 16",
-command => sub { exit; }
)->pack(-side => right ,-anchor => w,-fill => both);
$but04 = $mw->Button(
-text => "03:ファイル名の先頭に日付付加",
-anchor => 'w',
-font => "{MS 明朝} 16",
-command => sub { &Add_Date; }
)->pack(-side => top ,-anchor => w,-fill => both);
MainLoop;
# sub --------------------------------------------------------------------
sub OpenFile { #ファイルを表示する
$mw->bell;
my $file = $mw->getOpenFile(
-title => "Open File",
-filetypes => $types,
-initialdir => $ENV{HOME}
);
if ( defined $file ) {
$drc = $file;
$drc =~ s/\/[^\/]+$//;
print "OpenDrc[$drc] を選択しました。[cr]";# <stdin>;
return $drc;
}
}
sub Add_Date {# ファイル名先頭に日付(20071010_XXXXXXXXX)の「20071010_」を付ける
($drc) = &OpenFile;
chdir($drc); # $drc に日本語があると、移動できない
opendir(DIR,".");
@f1 = grep(/^[^\.]/i,readdir(DIR));
closedir(DIR);
$m1 = '\.doc|\.xls|\.ppt|\.jpg';
@f2 = grep(/($m1)$/i,@f1);
for (@f2) {
next if /^\d{8,14}/;
next if /\.pl$/i;
@f_s = stat($_);
@time = localtime($f_s[9]); #作成日付
@time = reverse(@time);
$time[3] += 1900;
$time[4] += 1;
$oldfile = $newfile = $_;
$newfile = sprintf("%4s%02s%02s_",@time[3..5]) . $_;
$newfile = $drc . $newfile;
$newfile = Encode::encode('Shift-JIS',$newfile);
$oldfile = $drc . $oldfile;
$oldfile = Encode::encode('Shift-JIS',$oldfile);
print "[$oldfile] →[$newfile]\n";#<stdin>;
rename($oldfile,$newfile);
}
chdir("..")
}