連番ファイルをゼロサプレスリネームする (Bulk Rename Utility)

多機能なファイル一括リネームソフト「Bulk Rename Utility」

実用例その3です。⇒その1その2

 

アクセス解析のキーワードを総覧していたところ、ゼロ埋めリネームではなく、その逆のリネームを行いたい意思が感じられるアクセスが見当たりました。

「1.jpg → 001.jpg」ではなく「001.jpg → 1.jpg」ということですね。

こういった処理は”ゼロパディング”に対し”ゼロサプレス”と呼ばれる処理だそうです。

今回はこのゼロサプレス処理でのリネームを考えてみます。

全てのファイルの命名をやり直す

  • 「File (2)」で"Name"をFixedにし、入力欄を空に
  • 「Numbering (10)」で"Mode"のPrefixを選択

BulkRenameUtility_1_131103

全てのファイルの名称をいったんクリアし、ゼロパディングせずにナンバリングを施します。

単純に数値だけのファイル名を再採番したい場合にのみ有用です。

元のファイル名を維持したまま、数値のみ再採番する

  • 「Remove (5)」で”Digits”のチェックをONにする
  • 「Numbering (10)」で”Mode”をSuffixにする

BulkRenameUtility_2_131103

数値部分を削除しつつ、ナンバリングで再採番しています。

採番位置はSuffix(=末尾)としていますが、位置は自由に変更できます。

この方法もお手軽ですが、元のファイル名に数値が含まれている場合は一緒に消えてしまいます。

元のファイル名を数値も維持したまま、連番数値のみ再採番する

  • 「Remove (5)」で”Last In"に3を入力
  • 「Numbering (10)」で”Mode”をSuffixにする

BulkRenameUtility_3_131103

Removeの位置を後ろから3文字分という形にしました。

連番数値はゼロパディングされている状態のはずですので、不要となる位置と桁数も自然と決まっているはずです。

ただ、これまでのいずれの方法でも飛び番がある場合、再採番ですのでリネーム前後で番号が変わってしまうことがあります。

元のファイル名を維持したまま、ゼロサプレス処理を行う

  • RegEx (1)」で"Match"に((?:image72 ))(0+)((?:[0-9]*))を入力(括弧のスペースは消してください)
  • 同様に"Replace"に\1\3を入力

BulkRenameUtility_4_131103

正規表現を頑張ってみました。ただ、当然ながらファイル名の規則によっていろいろと変えないといけない状況は出てくると思います。

今回は元々のファイル名「image72」に半角スペースを空けてゼロパディングされた連番を想定してみました。また、7番はなぜか欠落しているという状況です。

正規表現の解説ですが、まずは消したい部分と残したい部分で3つにわけました。

((?:image72 ))(0+)((?:[0-9]*))

丸括弧の間にスペースがあるのは、はてな記法で丸括弧を二重にすると脚注扱いされてしまい、エスケープも上手くいなかったためです。(はてなブログに問い合わせ中です)

 

最初の括弧部分((?:image72 ))ですが、こちらは元々のファイル名をキャッシュするようにしています。

真ん中の括弧部分(0+)は単純に'0'が1つ以上 連続している部分を抽出しています。

最後の括弧部分((?:[0-9]*))は'0'が連続したあとの連番部分をキャッシュしています。

あとは、置換文字列をキャッシュした最初と最後の部分だけ再割り当てするため、\1\3を指定しています。

 

正規表現はマスターできる気がしないくらい苦手ですが、とりあえずこれで飛び番ありでもゼロサプレスリネームできました。

ただ、これも「image72」の部分が何種類かあると駄目ですね。ここも正規表現にしたとしても、'0'が登場するような場合は回避できない気がします。

ファイル名はシンプルが一番ですね。←結論

 

以上です。疑問点や別のアイデアなどがあればお知らせください。