WindowsはExplorerで複数ファイルを選んでからF2キーでファイル名の一括変更が出来て便利なのですが、スペースとカッコが付いてfile (1).jpg
, file (2).jpg
とかになります。
これをfile1.jpg
, file2.jpg
という感じにしたいので調べました。
カッコとスペースの削除
PowerShellで連番ファイルのあるディレクトリに行って、
ls | ren -newname {$_ -replace '[ ()]'}
とすると、一括してファイル名からスペースとカッコが取り除ける。
ファイル名を正規表現で一括編集
ls | ren -newname {$_ -replace '検索', '置換'}
置換演算子
<string> -replace '検索', '置換'
一括削除の場合は置換文字列を省略できる。
コマンドレットのエイリアスを使わない書き方は
Get-ChildItem | Rename-Item -NewName { [Text.RegularExpressions.Regex]::Replace( $_.Name, '検索', '置換'}
って感じ?
0詰め
file001.jpg
という感じの0詰めにするには
ls *.png | ren -newname {'file{0:000}.png' -f [int]($_ -replace '\D*(\d+).*', '$1')}
書式設定演算子
<format string> -f arg0, arg1,…
'file{0:000}.jpg' -f $x
が printf 'file%03d.jpg',x
みたいな感じ?
{0:000}
の部分は{0:d3}
でもいいみたいです。
[int]
で文字列から整数にキャストしてます。
シングルクォートじゃなくてダブルクォートだと、"`$1"
で後方参照するのですが、バックティックで$をエスケープするのが不思議な感じ。
cmd.exeでは?
ファイル名の加工方法が分からなかったので、
(1).jpg
から(20).jpg
という連番で決め打ち。
FOR /L %i IN (1, 1, 20) DO REN (%i).jpg %i.jpg
※大文字部分は、小文字でもいけます。
OS X では?
Finderで直に連番には出来ませんがAutomatorを使えば出来ます。
"Automator 連番"でググってください。
ターミナル.appでは? というかUnix系では?
連番にしたいファイルが有るディレクトリに行って
やっつけ版
ls *.png | awk '{printf "mv -i %s file%03d.png\n", $0, NR}' | sh
とすればファイル名が0詰めの連番になります。file%03d.png
の部分が新しいファイル名です。0詰めが不要ならfile%d.png
に置き換えます。(printf
を調べてください。)
所詮やっつけなのでシェルに流し込んでる末尾の| sh
を外し、スクリプトを確認しながら臨機応変にカスタマイズしてください。
例:スペースを含むファイル名対応版
ls *.jpg | awk '{printf "mv -i \"%s\" file%03d.jpg\n", $0, NR}' | sh