忍者ブログ

[PR]

2024年05月18日 ()
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

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でリネームする.
まずはインストール

  1. http://www.cygwin.com/からダウンロードする
  2. ダウンロードしたsetup.exeはC直下にでも置いておく
  3. 全てデフォルトでインストールする

次にコマンドプロンプトから実行できるようにPathを通す

  1. [マイコンピュータ]を右クリック→[プロパティ]→[システムのプロパティ]ウィンドウが開く
  2. [詳細設定]タブ→[環境変数]ボタン→変数[PATH]にCygwinのbinディレクトリを入れる(デフォルトだとC:/cygwin/bin)
  3. ついでに作成するスクリプトを保存するフォルダにも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
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字