• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+
イイね!
2017年03月15日

ディレクトリ内のファイルのタイムスタンプをアルファベット順に更新する

ディレクトリ内のファイルのタイムスタンプをアルファベット順に更新する 私はクルマで音楽を聴くとき、USBメモリに楽曲ファイルとプレイリストを格納して、BMWのiDriveに接続しています。iDrive上でお目当てのプレイリストを指定して楽曲を再生させるわけですが、iDriveはプレイリストをアルファベット順に表示できません。プレイリストが増えてくると、お目当てのプレイリストを探し出すだけでも大変です。せめてカテゴリ別に表示できればよいのですが・・・。

で、プレイリストの実体ファイル(*.m3u8)のタイムスタンプ順(新しい順)に表示されることは分かったのですが、ファイルのタイムスタンプをアルファベット順に更新しようと以下のWindowsバッチファイルを作成したところ、大失敗。

forfiles /m *.m3u8 /c "cmd /c copy /b @file +,,"


あまりの実行速度の速さ故、すべてのファイルのタイムスタンプが1秒内に収まってしまい、結局、BMWのメディアサーバが順序を区別できないというお粗末。Windows上ではたしかにアルファベット順にタイムスタンプが更新されているのですが、おそらくiDriveは1秒単位で順序を判断しているものと思われます。

おまけに上記のバッチでは、ドイツ語やフランス語でお馴染みのウムラウトやアンサンテギュ(例:Dvořák)が文字化けして使えません。正確には、NTFSフォーマットのCドライブではUnicodeのコードページがあって文字化けせず使えるのですが、FAT32フォーマットのUSBメモリ上ではコードページがないため、該当ファイルを認識できない、となります。

前置きが長くなりましたが、実行環境がお手軽なバッチを使うのを諦めてPerlを使うことにしました。Windows用のPerl実行環境としては、「Active Perl」、「Strawberry Perl」、「Cygwin」などがあり、いずれも無料で利用できます。Unicodeも利用できるようPPM(Perl Package Manager)でWin32::Unicodeもインストールしておきます。

せっかくPerlを使いますので、プレイリストに含まれる楽曲数をファイル名に付与する機能も追加してスクリプトを組みました。


use strict;
use warnings;
use utf8;
use Win32::Unicode::Native;

# メインルーチン
my $root = ".";
my $filelist = &touch_files($root);

foreach (@$filelist){
print "$_\n";
}

# サブルーチン
sub touch_files {
my $dir = shift;

# ディレクトリ内のプレイリストファイル一覧を取得
opendir (my $dh, "$dir");
my @list = grep /\.m3u8/, readdir $dh;
closedir $dh;
@list = sort @list;

# 現在時刻を取得
my $now = time;

foreach my $file (@list) {
# プレイリストに含まれる曲数をカウント
my $line = 0;
open(my $fh, "+<:utf8", $file) or die "Can't open '$file': $!";
while(<$fh>){
$line++ unless /^\s*$/; # 空行はカウントしない
}
close($fh);

# プレイリストファイル名に曲数を追加
my $new_file = $file;
$new_file =~ s/\s*\(.*\)\.m3u8/\.m3u8/;
$new_file =~ s/\.m3u8/ \($line\)\.m3u8/;
rename($file, $new_file);

# プレイリストファイル名のタイムスタンプを更新
utime $now, $now, $new_file;
$now--;
my @filestat = stat $new_file;
push @$filelist, localtime($filestat[9])." : $new_file";
}

@$filelist = sort {$b cmp $a} @$filelist;
return $filelist;
}


これを実行すると、以下の写真のように、アルファベット順に曲数付きのプレイリストが表示されるようになります。



これでiDriveの使い勝手が良くなる・・・はずです。
ブログ一覧 | プログラミング | パソコン/インターネット
Posted at 2017/03/15 23:23:13

イイね!0件



今、あなたにおすすめ

ブログ人気記事

並べて~♪。なう。(・∀・)
KimuKouさん

今日のゆるポタ2025.05.21
osatan2000さん

Instagramプレゼント企画開 ...
エーモン|株式会社エーモンさん

みんカラ定期便
ヴィタさん

人間ドックだけじゃ、つならないじゃ ...
chishiruさん

約1年ぶりのモンスター出現にスタッ ...
みんカラスタッフチームさん

この記事へのコメント

コメントはありません。

プロフィール

sivawancoです。よろしくお願いします。
みんカラ新規会員登録

ユーザー内検索

<< 2025/5 >>

    123
45678910
11121314151617
18192021222324
25262728293031

ブログカテゴリー

リンク・クリップ

BMW(純正) エアフィルター 
カテゴリ:その他(カテゴリ未設定)
2022/05/16 22:24:16
ドアロックピンの異音解消 
カテゴリ:その他(カテゴリ未設定)
2016/12/28 18:15:07
ステアリングコラムまわりビビり音対策 
カテゴリ:その他(カテゴリ未設定)
2016/11/05 22:51:36

愛車一覧

BMW 3シリーズ セダン BMW 3シリーズ セダン
BMW ActiveHybrid3に乗っています。
マツダ アテンザセダン 海豚 (マツダ アテンザセダン)
初めて買った車でした。

過去のブログ

2017年
01月02月03月04月05月06月
07月08月09月10月11月12月
2016年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ

あなたの愛車、今いくら?

複数社の査定額を比較して愛車の最高額を調べよう!

あなたの愛車、今いくら?
メーカー
モデル
年式
走行距離(km)
© LY Corporation