人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【解決で500P】:Perlで階層を走査したい

WindowsXPでPerlスクリプトを実行しています。

以下のスクリプト「Perlで階層のあるディレクトリを走査する」
http://code.nanigac.com/source/view/535
を利用して、あるフォルダ以下にあるファイルリストを出力するスクリプトを作っています。

しかし、「表」「予」「申」「能」「十」「ソ」などの0x5C文字がフォルダ名の最後に付いていると
そのフォルダより下を走査できません。
[例]¥日程表¥ ¥教育技能¥

これ以下も走査出来るようにするにはどうすればよいでしょうか。

●質問者: harrypotter
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Perl WindowsXP スクリプト ディレクトリ ファイル
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● ardarim
●500ポイント ベストアンサー

こんな感じでどうでしょうか。

use File::Basename;

# entry : サーチするディレクトリ
# depth : 階層の深さ(tabインテンドの表示数)
sub my_walk
{
 my $entry = $_[0];
 my $depth = $_[1];

 my $type = "";

 $type = "(d)" if (-d "$entry/");
 $type = "(s)" if (-l "$entry/");

 print "|\t" x $depth, "+---->", basename($entry), $type, "\n";

 return if (! -d "$entry/") || (-l "$entry/");

 opendir(DIR, "$entry/");
 my @list = sort readdir(DIR);

 foreach my $name (@list)
 {
 next if $name eq '.' || $name eq '..';

 my_walk("${entry}/${name}", $depth+1);
 }

 closedir(DIR);
}

$entry = $ARGV[0];
$depth = $ARGV[1];

my_walk($entry, $depth);

参考:Shift-JISテキストを正しく扱う - Shift-JISの漢字を含むファイル名/パス名

◎質問者からの返答

回答ありがとうございます。

月曜日に試させていただきます。

→basenameでディレクトリ名は拾えませんでしたが、なんとかいけました。ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ