file rename script
2008年11月17日 (windows)
やりたいこと
音楽ファイルがたくさんある.こいつらをリネームしたい.が,ファイル数が多いので手作業でリネームしていくのは面倒だ.
環境はWindows,このためにわざわざWindowsのバッチ処理を勉強したくない.
処理したい条件は以下
- トラック番号がファイルの最初に付いているファイルのトラック番号を削除
- ファイル名の全ての空白文字を_(アンダースコア)に置換
- '(シングルクォート)は全て削除
- 例:03 Without You.mp3→Without_You.mp3
- 1つのコマンド実行でフォルダ内の全てのファイルが処理される
フリーソフトで2〜3探したが,条件にマッチするものはないと判断.
Cygwin
そこでCygwinを使う.
構想としてはCygwinをインストールし,Linuxと互換性のあるShellを使ってShellScriptでリネームする.
まずはインストール
- http://www.cygwin.com/からダウンロードする
- ダウンロードしたsetup.exeはC直下にでも置いておく
- 全てデフォルトでインストールする
次にコマンドプロンプトから実行できるようにPathを通す
- [マイコンピュータ]を右クリック→[プロパティ]→[システムのプロパティ]ウィンドウが開く
- [詳細設定]タブ→[環境変数]ボタン→変数[PATH]にCygwinのbinディレクトリを入れる(デフォルトだとC:/cygwin/bin)
- ついでに作成するスクリプトを保存するフォルダにもPathを通しておく(今回はC:/cygwin/home/Administrator/bin)
Pathが通り今回使いそうなコマンドが使えることが可能なことを確認する
> mv .... error messages > sed .... error messages > echo aaa aaa > sh sh-3.2$
問題なさそう.
Shell Script
お隣のLinuxでShellScriptを書く.
source(rs2n.sh)
#!/bin/sh #replace space to underscore from file name if [ $# -eq 0 ]; then echo "Usage: $0 FILES.." exit 1 fi if [ ! -e $FILENAME ]; then echo "no such file or directory" exit 1 fi for i in "$@" do #echo $1 #FILENAME=$1 FILENAME=$i REPLACEFILENAME=`echo $FILENAME | sed \ -e "s;';;g" \ -e 's;^[0-9]-[0-9].\ ;;g' \ -e 's;^[0-9].\ ;;g' \ -e 's;,\ ;,;g' \ -e 's;\ ;_;g'` mv "$FILENAME" $REPLACEFILENAME done
実行する
% mkdir test % cd test % touch 01\ test.mp3 % touch 1-02\ test\ test.ogg % touch 03\ test.wma % ls | cat 01 test.mp3 03 test.wma 1-02 test test.ogg % sh ../rs2n.sh * % ls | cat test.mp3 test.wma test_test.ogg %
できた.
note
for文の$@は$0を除く全ての引数に展開される. "$@"とすると展開されるときにダブルクォートで括られる. (例:script aaa bbb→"aaa" "bbb") mv "$FILENAME" $REPLACEFILENAME "$FILENAME"のようにダブルクォートで括らないとスペースを含むファイル名の場合 2つのファイルと移動先のディレクトリと認識されてしまう. cf. % man test % man sed
Windowsで実行
まずはLinuxで書いたシェルスクリプトを頑張ってWindowsのさっきPathを通したフォルダ(C:/cygwin/home/Administrator/bin)に入れる.
次にコマンドプロンプトを立ち上げる.例のファイルはTドライブにあるのでCygwinのBashを立ち上げるとcdできなくなるかもしれないのでコマンドプロンプトで・・
あとなぜかCygwinのBashだとmが打てない.
> cd /d t: > cd music > sh rs2n.sh *
note
Windowsのコマンドプロンプトではコマンドのオプションは/(スラッシュ)で指定するらしい. cdでドライブを移動するときは/dオプションを使う.
できた.あとは細かい部分を手作業で直していくだけ.
PR
Comment