動作
Cubase5をいまだに使っているので以降のバージョンのフォルダ構成が違ったら知りません(´・ω・`)
プログラミング勉強したての人間がググりながら作成したのでもし使う場合には自己責任でご利用ください。
CubaseProjects(人によって名前は違うかも)内にたまっていく「名称未設定」フォルダに一個一個アクセスして中に入っている「.cpr」(プロジェクトファイル)の名前を拾ってフォルダ名をつけ直していきます。たまりますよね、名称未設定。え?溜まらないの?え?気付いたら四桁間近とかたまらない?たまるよね?
フォルダ内に「.cpr」がないフォルダに当たると処理がずれてリネーム処理されなくなってしまうのだけど、頭を使うのが疲れてきていたので何度も処理を呼び出し直すという力業で解決しています。「.cpr」が含まれないフォルダはリネームされません。そもそも「.cpr」が含まれないプロジェクトフォルダって、Cubase起動してちょっと作りかけたけどあんま気分乗らんな、と思って保存せずに閉じたやつなので(自分の場合。他の人は知らん)処理から漏れて残った名称未設定は後でまとめて削除。
フォルダ内に複数の「.cpr」ファイルがある場合には一番最初に拾われた名前でリネームされます。(例:proj01.cpr / proj02.cpr / proj02-02.cpr といったプロジェクトファイルが3つある場合には多分一番最初に拾われるであろう「proj01」という名前にフォルダがリネームされます。)
作り方・使い方
新規テキストファイル > cr.bat とか適当に名前をつけておく(cr = CubaseRenameという謎の言葉を略したもの)
以下を記述して保存
@echo off
setlocal enabledelayedexpansion
cd /d %~dp0
set filename=
for /d %%f in (名称*) do (
set folder=%%f
set folder=!folder: =!
echo %%f
cd %%f
for %%l in (*.cpr) do (
cd ..
set filename=%%l
set filename=!filename: =!
move %%f !filename:~0,-4!
cd %%f
)
cd..
)
新規テキストファイル > rename10.bat とか適当に名前をつけておく (複数回呼び出して力業で解決するためのバッチ)
以下を記述して保存
call cr.bat
call cr.bat
call cr.bat
call cr.bat
call cr.bat
(↑ 長くなるので5行で省略するけど任意の回数コピペ。20行くらいあればいいんじゃなかろうか)
「名称未設定」たまっているCubaseProjectsフォルダ内に上記2つのバッチファイルを移動(最初からその中で作ってもいいし。)
「rename.bat」をリネームされなくなるまで実行
(残った名称未設定フォルダは.cprが入っていないフォルダなので不要(※必要な人もいるかもしれないので自身の環境に合わせて))
説明とかなんか
動機とか経緯
そもそもプログラミング勉強し始めたけど音の処理とか映像の処理とかいきなりやるにはレベル高すぎて少し慣れが必要とは思いつつ実用性無いものを作るのも食指が動かなかったのでなにか実用性のあるものを作ろうと思い着手しました。入門書とか読んでると「サンプルコードは全て自分で打ちましょう^^」とか書かれてるんですけど、めんどくさいからスルー。
簡単にできそうで実用性のあるもの、と考えたときにちょうど年末だったのでデータの整理をしようと思いCubaseProjectsを開いたところ、相変わらず名称未設定がズラッと並ぶ光景を見て、自動でリネームするやつ作ったろ、と思いました。これまでにさらっとさらった言語はC、Java、VB、Processingなんですけど今まで読んだ内容でファイル名の取得とか全然思いつかなかったので、そういえばコマンドプロンプトのコマンドでそんなのなかったっけと思い、バッチファイルにすることにしました。必死にググりながら作ったんですけど、なんとかそれっぽいのが出来た辺りインターネットってすごい。三時間を目安で頑張ったんですけど結局六時間かかりました。
一行ずつの役割
@echo off
別にいらないっちゃいらないんですけど作業中にコマンド全部出るのがうざかったのと今後編集することがあった際にいちいち書くのもめんどくさいのでそのまま残しておきました。
setlocal enabledelayedexpansion
こいつが一番厄介でした。for文の中の変数が全然思い通りにならなくてそこで数時間潰したんですが、何か知らんけどfor文の中で変数に代入してもそれが確定されるのがforの処理終わってからとかいうよくわからん仕様(遅延環境変数とかどうのこうの)らしくて、まだよくわかってないけどこの呪文唱えとくと一応代入できるみたいです。
cd /d %~dp0
バッチファイルが置かれてあるディレクトリに移動する。(今回の場合はCubaseProjectsディレクトリ)
set filename=
変数リセット。作成中に以前の処理のが残っててうざかったので書きました。実際の処理では必要ないけど今後編集することがあった際に以下略。
for /d %%f in (名称*) do (
厄介なfor文。
「/d」 ディレクトリの名前を対象にする
「%%f」 変数f。取得したディレクトリの名前が入る。
「in (名称*)」 名称~のディレクトリを対象にする
set folder=%%f
変数folderに取得したディレクトリの名前を代入。
set folder=!folder: =!
ディレクトリの名前にスペースが有ると処理ができないっぽいのでスペースを除去。このときに通常の書き方だと「%folder: =%」とするのだけど、先に書いた遅延環境変数だかなんだかの影響をなくすためには「!」で囲めばいいらしいです。
echo %%f
ちゃんとディレクトリ名取得できているかの確認のための表示コマンド。今後編集することが以下略。
cd %%f
ディレクトリ名を取得したディレクトリの中に入る。
for %%l in (*.cpr) do (
厄介なfor文その2。
「%%l」 変数l。取得したファイル名が入る。
「in (*.cpr)」 .cprと最後につくファイルが対象
cd ..
CubaseProjectsに戻る。
set filename=%%l
変数filenameに取得したファイル名を代入
set filename=!filename: =!
スペース除去
move %%f !filename:~0,-4!
ディレクトリ名変更。「%%f」は元の「名称未設定」。「!filename:~0,-4!」は拡張子「.cpr」を削ったプロジェクトファイル名。
cd %%f
もう一回名称未設定に入ろうとする。が、名前が変更された場合入れない。
)
cd..
.cprファイルがなかった場合、CubaseProjectsに戻るためのコマンド
)
call cr.bat
cr.batの呼び出し。
最後のcd辺りを工夫すれば力業を使わなくても処理できそうな気がするんだけどこれ以上長くするよりはとりあえず動くのでこれでいいや、ということで力業に頼りました。改良版誰か作っといてください。