複数のファイルをドラッグ&ドロップすると、ルールに従ってファイル名を変更するバッチファイルを作った。
ファイル名の先頭に「hoge_」を追加する
for %%F in (%*) do ren "%%~nxF" "hoge_%%~nxF"
ファイル名の末尾に「_fuga」を追加したいときは「hoge_%%~nxF」の部分を「%%~nF_fuga%%~xF」のように書く。
「~nx」などは渡された引数(ここではフルパスつきのファイル名)からファイル名や拡張子を取り出すもの。ほかにもたとえばこんな指定ができるそうだ。
- %~a
- 変数aから引用符(")を削除
- %f
- 変数の中のフルパスつきのファイル名
- %d
- 変数の中のドライブ名
- %p
- 変数の中のフルパス
- %n
- 変数の中のファイル名
- %x
- 変数の中の拡張子
- %a
- 変数内のファイルのファイル属性
- %t
- 変数内のファイルのタイムスタンプ
- %z
- 変数内のファイルのサイズ
ファイル名の一部を削除し、特定の桁に文字を追加したり特定の桁の文字を削除したりする
「IMG_20201011_120000.jpg」というファイル名を「2020-10-11 12.00.00.jpg」というファイル名にしたい。いろいろ調べてこういう内容になった。
for %%F in (%*) do call :sub %%F exit /b :sub set fname=%~n1 set ext=%~x1 set y=%fname:~4,4% set m=%fname:~8,2% set d=%fname:~10,2% set h=%fname:~13,2% set mm=%fname:~15,2% set s=%fname:~17,2% set after=%y%-%m%-%d% %h%.%mm%.%s%%ext% ren %1 "%after%" goto :EOF
「%変数名:~a,b%」は「変数の先頭からa文字を削り、残った文字列からb文字を取り出す」というもの。ほかにもこんな指定ができるそうだ。
- %変数名:~a%
- 変数の先頭からa文字を削った残り
- %変数名:~a,b%
- 変数の先頭からa文字を削り、残った文字列の先頭からb文字(上のバッチファイルで使用)
- %変数名:~a,-b%
- 変数の先頭からa文字を削り、残った文字列の最後からb文字を削った残り
- %変数名:~-a%
- 変数の最後からa文字
- %変数名:~-a,b%
- 変数の最後からa文字を取り出し、残った文字列の先頭からb文字
- %変数名:~-a,-b%
- 変数の最後からa文字を取り出し、残った文字列の最後からb文字を削った残り
ファイル名の特定の文字列を置換する
「2020」を「2021」にしたいときは「set 変数名=%変数名:2020=2021%」のように書く。
for %%F in (%*) do call :sub %%F exit /b :sub set fname=%~n1 set ext=%~x1 set fname=%fname:2020=2021% ren %1 "%a%%ext%" goto :EOF
バッチファイルではなくリネームソフトを使う
何度も同じリネームをするなら上のようなバッチファイルを作っておくのがよいが、今リネームソフトってどんなのがあるのかな。
Windows用のリネームソフトといえば定番の「Flexible Renamer」がある。正規表現での置換や連番の付与ができたりして高機能だが、ファイル名の一覧のリフレッシュが遅くてちょっと使いづらい。
使い慣れているテキストエディタがあれば、その検索/置換機能を使ってファイル名の一覧を編集し、その内容に従ってリネームするソフトがある。「E-Rename」をよく使っていたがファイル名の長さが256バイトを超えるとリネームできない。Windowsは256文字までのファイル名を扱えるから、日本語が含まれているファイル名は256バイト以上にできる。
「【無料】リネームのソフト一覧 - 窓の杜」を見たら同じようなソフトとして「LiName」が紹介されていた。作者のページもある。ファイルをドラッグ&ドロップして「リネーム」ボタンをクリックすると、ファイル名の一覧が書かれたテキストファイルが開かれる。中に書かれたファイル名を編集し、テキストファイルを保存して閉じるとそれを検知し、即座にリネームしてくれる。256バイト以上の長いファイル名もリネームできる。これからはこちらも使おう。
関連記事
- AutomatorでiPhoneの写真や画像のファイル名とタイムスタンプをいい感じにする(https://ima.hatenablog.jp/entry/20170803/photorename)
参考にしたページ
- 【まとめ】バッチファイルでファイル名一括変更 - Notes_JP(https://www.mynote-jp.com/entry/2016/01/24/115618)
- ※ここの「ファイル名の切り出し」にあるバッチファイルは1行目の末尾が「"%%F"」だが、自分の環境ではここのダブルコーテーションをなくして「%%F」にしないと動作しなかった
- Windowsバッチファイルに複数のファイルをドラッグ&ドロップ - 日曜プログラマーの個人的覚書(https://mas-inagaki.hatenadiary.org/entry/20100201/1265007622)
- コマンドプロンプトを使ってみよう! -バッチファイルとは?-(https://ykr414.com/dos/bat.html)
- ファイル名の置換(ファイル名の一部文字を別の文字に置き換える) - バッチもん研究所 blog(https://jak-san.hatenablog.com/entry/20090402/1238671393)
追記
作ったバッチファイルを「送る」から実行できるようにするときのちょっと便利な方法について書きました。
- Windowsの「送る」フォルダへすぐ行く方法+ちょっと便利なコマンド集(https://ima.hatenablog.jp/entry/2020/10/21/164500)