InDesignファイルを全て取得

そんなわけで、あるフォルダ内のInDesignファイルを全て取得するスクリプトを書いてみた。
あまりに基本なんで、ど〜よ?

(new Folder(foldername)).exists
でtrueが返ればフォルダなんだな〜って思ったらファイルでもtrueが返ります。
ファイルかフォルダの区別ってどうするんだろ?
(new Folder(foldername)).getFiles().length
で0かそれ以上かで判定。まぁ今回はこれでいいけども・・・


2009/9/9 ちょこっと修正しました。



メインスクリプト

#include "~/Library/IddJavascript/spaceiru.jsx"

if(spaceiru.system.selectFolder()== false){
	alert('ユーザーによってキャンセルされました。');
	exit();
}


////選択フォルダ
var baseFolder = spaceiru.system.getFoldername();

///ライブラリ初期設定 選択フォルダのパスを渡す
spaceiru.idd.initIdd(baseFolder);

///ライブラリメイン処理
spaceiru.idd.getIdd();

///結果取得(パスが配列で返る)
var iddFile = spaceiru.idd.getResult();

for(var i=0;i<iddFile.length;i++)
{
	//なんか処理をする。
	alert(iddFile[i]);
}


インクルードファイル spaceiru.jsx

//namespace spaceiru
//
//
//

var spaceiru = new Object();
spaceiru.system = new Object();
spaceiru.idd = new Object();

spaceiru.foldername = "";

spaceiru.system.selectFolder = function selectFolder(){
	
			var folderObj;
			var foldername;
			
			foldername = Folder.selectDialog ('フォルダを選択してください。');
		
			if(foldername != null){
				
				spaceiru.system.setFoldername(foldername);
				
				return foldername;
				
			}else{
				
				return false;
				
			}
	}

spaceiru.system.getFoldername = function getFoldername(){
	
				return spaceiru.foldername;
	
}


spaceiru.system.setFoldername = function setFoldername(name){
	
				spaceiru.foldername = name;
				
	
}


//////////////////idd File Select/////////////////
///////////////////////////////////////////////

spaceiru.idd.initIdd = function initIdd(folder){
	
			spaceiru.idd.baseFolder = folder;
			spaceiru.idd.presentFolder = 	spaceiru.idd.baseFolder;
			spaceiru.idd.count = 0;
			spaceiru.idd.presentRoop = new Array();

			spaceiru.idd.baseFilecont = (new Folder(spaceiru.idd.baseFolder)).getFiles().length;

			spaceiru.idd.checkFolderName;
			
			///結果を入れる配列
			spaceiru.idd.result = new Array();
}


spaceiru.idd.getIdd = function getIdd(){
	

	spaceiru.idd.presentRoop[0] = 0;

	if(spaceiru.idd.baseFilecont == 0) return;
	

	while(spaceiru.idd.presentFolder != false)
	{
		
		spaceiru.idd.presentFolder = spaceiru.idd.checkFolder(spaceiru.idd.presentFolder,spaceiru.idd.presentRoop[spaceiru.idd.count]);
		
		
		if(spaceiru.idd.presentFolder == false)
		{
			if(spaceiru.idd.count > 0){
				spaceiru.idd.count -= 1;
			}
			
			///親にセット
			spaceiru.idd.presentFolder = (new Folder(spaceiru.idd.checkFolderName)).parent.fsName;
			
			if((spaceiru.idd.count == 0) && ( spaceiru.idd.baseFilecont  == spaceiru.idd.presentRoop[0]))
			{
				
				///終了
				spaceiru.idd.presentFolder = false;
				
			}
			
		}else{
			///次の階層
			spaceiru.idd.count += 1;
			spaceiru.idd.presentRoop[spaceiru.idd.count] = 0;
		}
		
	}

}


spaceiru.idd.checkFolder = function checkFolder(name,start){
	
	var list =  (new Folder(name)).getFiles ();
	var result = false;


	
	for(var i=start;i < list.length;i++)
	{	
		spaceiru.idd.presentRoop[spaceiru.idd.count] = i+1;
		
		var len = (new Folder(list[i].fsName)).getFiles().length;
		if(len > 0)
		{
			result = list[i].fsName;
			break;
			
		}else{
			spaceiru.idd.setResult(list[i]);		
		}
		
	}
	
	spaceiru.idd.checkFolderName = name;
	return result;
}

/////ファイル名チェック
spaceiru.idd.setResult = function setResult(obj){
	
	var name = obj.name;
	var path = obj.fsName;
	
	if(name.match(/\.indd$/g))
	{
	      spaceiru.idd.result.push(path);
	}
	
}

spaceiru.idd.getResult = function getResult(){
	return spaceiru.idd.result;
}


spaceiru.jsx 直
こんなんかなぁ〜。