今回は複数のプロジェクトから検索しレポートとして保存するものです。前回のスクリプトは一致したプロジェクトファイルがある場合に開くだけのものでしたが、場合によってはどこにどのような名前のものが使われているか知りたい場合もあります。
以下のスクリプトは指定されたフォルダ以下にある全てのフォルダ内にあるAfterEffectsのプロジェクトを検索しレポートファイルとして保存します。その際、項目がフッテージファイルの場合にはファイルのパスも出力します。
// サブフォルダ内にある全てのプロジェクトを開いて検索しレポートファイルとして保存(部分一致で全てリストアップ)
(function(){
var findName = prompt("検索するフッテージ/フォルダ名の一部を入れて下さい", "コンポ");
if (!findName) return;
var folderObj = Folder.selectDialog("親フォルダを選択してください");
if (!folderObj) return; // キャンセルされたら処理しない
var savefile = File.saveDialog("保存するレポートファイル名を入れて下さい");
if (!savefile) return;
if (!savefile.open("w")){
alert("レポートファイルを保存できません");
return;
}
savefile.writeln("検索文字:"+findName);
savefile.writeln();
var flag = false; // フラグと開くファイルを共用
getFolder(folderObj);
if(!flag) {
savefile.writeln("---------------------------");
savefile.writeln(findName+"の名前を持つ項目は見つかりませんでした");
}
// フォルダ内の一覧を取得
function getFolder(folderObj){
var fileList = folderObj.getFiles();
for (var i=0; i<fileList.length; i++){
if (fileList[i].getFiles) {
getFolder(fileList[i]);
}else{
if (fileList[i].name.indexOf(".aep") > -1){ // .aepの文字が含まれる場合に処理
app.open(fileList[i]);
var pName = File.decode(fileList[i].name);
savefile.writeln("プロジェクト名:"+pName);
for(var j=1; j<=app.project.items.length; j++){
var iName = app.project.item(j).name;
if (iName.indexOf(findName) > -1) {
try{
var fName = " ("+(File.decode(app.project.item(j).file.fullName))+")";
}catch(e){fName="";}
savefile.writeln(iName+fName);
flag = true; // 何かが見つかったのでフラグを立てる
}
}
app.project.close(CloseOptions.DO_NOT_SAVE_CHANGES);
savefile.writeln();
}
}
}
}
})();
上記のスクリプトは部分一致になっていますが、完全一致で検索したい場合は以下のように変更してください。
if (iName.indexOf(findName) > -1) {
↓
if (iName == findName) {
[
サンプルをダウンロード]