レイヤー名かフッテージ名末尾に数値を振って管理している場合、このスクリプトで足し引きできます。
[概要]
開いたプロンプトに数値を入力すると、全選択オブジェクトの元の名前末尾の数値をオフセットするスクリプト。
[使い方]
- 対象のオブジェクトを全て選択する
- スクリプトを実行する
- 開いたプロンプトに半角数字を入力しOKをクリックする
[オプション]
- レイヤーを選択していればレイヤー名を変更する
- プロジェクトパネルのフッテージを選択していればフッテージ名を変更する
[解説]
var actItm = app.project.activeItem;
var sel="";
if(actItm instanceof CompItem){//タイムライン
sel = actItm.selectedLayers;
selectobj="レイヤーの";
}else{//プロジェクトウィンドウ
sel = app.project.selection;
selectobj="フッテージの";
}
if(sel.length>0){
var numMath=parseInt(prompt(selectobj+"ズラす数値を入力", "1"));
var inputNum=(numMath>0)?"+"+numMath:numMath;// 操作履歴で見やすい用に入力値を保存
}
function f_numAddSubRenamer(){
if(sel.length>0){
var num=0;
var moji=[];
var keta=0;
var errorLayer=[];
for(i=0;i<sel.length;i++){//桁数把握
num=sel[i].name.match(/\d+$/g);//末尾の数字配列
if(num!=null){
num=num.join("");//数字部分の文字列
moji[i]=sel[i].name.slice(0,-num.length);
if(!isNaN(num)){
keta1=num.length;//元が0パディングされてた場合の桁数保存
num=Number(num)+numMath;//ここで0パディングが消える
keta=Math.max(keta,num.toString().length);
keta=Math.max(keta,keta1);//0パディングあったら復活
}
}else{
errorLayer.push("#"+sel[i].index+" "+sel[i].name);
}
}
for(i=0;i<keta;i++){
padding+="0";
}
for(i=0;i<sel.length;i++){
num=sel[i].name.match(/\d+$/g);//末尾の数字配列
if(num!=null){
num=num.join("").toString();//数字部分の文字列
num=Number(num)+numMath;
num=(padding+num).slice(-keta);
sel[i].name=moji[i]+num;
}
}
if(errorLayer.length>0){
alert("末尾に数字のないレイヤーはスキップされました\r"+errorLayer.join("\r"));
}
}// if(sel.length>0)
}
if(isNaN(numMath)==false){
app.beginUndoGroup("numAddSubRenamer->"+inputNum);
f_numAddSubRenamer();
app.endUndoGroup();
}
4行目で選択しているのがタイムラインか調べます。そうでなければプロジェクトウィンドウを処理対象にします。
12行目でfunctionに入る前にapp.beginUndoGroup()の表示文字列用にプロンプトの入力値をinputNumで受け取ります。
※やり直しする際の名前で、情報パネルにも表示されるやつです
プラスの数値の場合は「+3」などと表示したいので、(numMath>0)で0以上なら”+”+numMathとします。マイナスの数値の場合はそのままで「-」がつくのでnumMathのみでOKです。
24行目と39行目で2回for文を回しています。
似た処理をしていますが、1度目はレイヤー名末尾の数値が何桁か把握するために回します。
num=sel[i].name.match(/\d+$/g);で末尾の連続した数値を配列で受け取りますので、num=num.join(“”);で結合します。
数値のほうが分かれば、moji[i]=sel[i].name.slice(0,-num.length);で数値の文字数分削った残りのレイヤー名が取り出せます。
29行目~34行目で一番桁数の多い数値を調べます。これを使って最終的に全レイヤー末尾の数値の桁数を合わせます。
36行目はレイヤー名末尾に数値のないレイヤーがあれば一旦ここに溜めておきます。
39行目で元の桁数に合わせられるようゼロパディングします。元の桁数分「0」を文字列で追加し、最終的に48行目で右から該当文字数をsliceして合わせます。
43行目からが本処理で、取り出した数値にプロンプトで入力した数値を足して(マイナスなら引いて)、ketaの一番多い桁数に合わせ、sel[i].name=moji[i]+num;で数値を除いたレイヤー名部分と計算後の数値を繋いでリネームしています。
この記事へのコメントはありません。