12
11

More than 5 years have passed since last update.

連番ファイル名の編集

Last updated at Posted at 2014-05-19

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 $xprintf '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
12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11