InDesignとPhotoshopの、JavaScriptの覚え書き中心に書いていこうと思っています。参考になれば幸いです。
最近アップルスクリプトをかじり始めました。
他の趣味についても、たまに書こうかな~ と、思っています。
スクリプトが増えてくると、それぞれのデータが散乱してきてどれがなんのデータか分かりづらなってきた。(忘れっぽいだけ?…)
テストしているときに適当に置いといたままとか、とりあえずパスで指定しやすい場所に置いて…… 気付いたらデータがいろんな場所に散らばってしまった。いかん。
と、いうことでスクリプトのサーバー管理、スクリプトとそれに使うデータをフォルダにまとめ、さらにスクリプトのリロケータブル化をしました。
簡単に説明すると
1. 一つのスクリプトに対してそれに使うパーツをフォルダにまとめてサーバーのスクリプト管理フォルダに入れる。
2. サーバーの別のフォルダにスクリプト自体のエイリアスをまとめておく。
3. 各マシンのスクリプトパネルには、 2 のフォルダのエイリアスを入れる。サーバー内で修正すれば全マシンが常に最新バージョンのスクリプトを使える。(これは2年前位にやっていた)
4. まとめたフォルダ単位で別の場所に移動してもパーツのパスを書き換えなくて済むように相対パスで指定するように修正(サーバー入れ替えやトラブル時にスクリプトの修正をしなくて済む)
上の図のようにまとめておけば、フォルダAごと動かせばどこに置いてもスクリプトの修正なしで実行できる。移動してもエイリアスのリンク切れもなかった。
$.fileName
で、実行しているスクリプト自体のファイルネームを含むパスを取得できる。File(app.activeScript).fsName でも取得できるが、ExtendScript Toolkitから実行した場合読み取れなかったので、デバッグが大変(Macでは読み取れなかったが、Windowsではパスの区切りが"¥"で読み取れた)
読み取ったパスの最後の "/"(スラッシュ)から後を削除して、パーツの入ったフォルダ名とパーツのファイル名を追加すれば指定できる。
※会社のサーバー上に置いた場合は、読み取ったパスの前に "Volumes/” を追加しなければだめだった。
サンプルスクリプト
※バックスラッシュになっている所は半角の"¥"です。当方の環境では化けて表示されています。上のサンプルをコピーしてExtendScript Toolkit にペーストすると正しく表示されます。
テストしているときに適当に置いといたままとか、とりあえずパスで指定しやすい場所に置いて…… 気付いたらデータがいろんな場所に散らばってしまった。いかん。
と、いうことでスクリプトのサーバー管理、スクリプトとそれに使うデータをフォルダにまとめ、さらにスクリプトのリロケータブル化をしました。
簡単に説明すると
1. 一つのスクリプトに対してそれに使うパーツをフォルダにまとめてサーバーのスクリプト管理フォルダに入れる。
2. サーバーの別のフォルダにスクリプト自体のエイリアスをまとめておく。
3. 各マシンのスクリプトパネルには、 2 のフォルダのエイリアスを入れる。サーバー内で修正すれば全マシンが常に最新バージョンのスクリプトを使える。(これは2年前位にやっていた)
4. まとめたフォルダ単位で別の場所に移動してもパーツのパスを書き換えなくて済むように相対パスで指定するように修正(サーバー入れ替えやトラブル時にスクリプトの修正をしなくて済む)
上の図のようにまとめておけば、フォルダAごと動かせばどこに置いてもスクリプトの修正なしで実行できる。移動してもエイリアスのリンク切れもなかった。
$.fileName
で、実行しているスクリプト自体のファイルネームを含むパスを取得できる。File(app.activeScript).fsName でも取得できるが、ExtendScript Toolkitから実行した場合読み取れなかったので、デバッグが大変(Macでは読み取れなかったが、Windowsではパスの区切りが"¥"で読み取れた)
読み取ったパスの最後の "/"(スラッシュ)から後を削除して、パーツの入ったフォルダ名とパーツのファイル名を追加すれば指定できる。
※会社のサーバー上に置いた場合は、読み取ったパスの前に "Volumes/” を追加しなければだめだった。
サンプルスクリプト
- //スクリプト自体のファイルネームを含むパスを取得
- var myPath = $.fileName;
- //最後のスラッシュまでの文字列にする
- var parentPath = myPath.substr(0,myPath.lastIndexOf("/"));
- //パーツの入っているフォルダ名とファイルネームを追加
- var PartsPath = parentPath + "/部品フォルダ/パーツa.eps";
- var alertMessage = "このスクリプトのパス\n" + File.decode(myPath) + "\n\n";
- alertMessage += "指定する部品のパス\n" + File.decode(PartsPath);
- alert(alertMessage);
※バックスラッシュになっている所は半角の"¥"です。当方の環境では化けて表示されています。上のサンプルをコピーしてExtendScript Toolkit にペーストすると正しく表示されます。
PR
ブログを開設したはいいが…とりあえず、誰かに見てもらうよりは自分用の覚え書き程度に不定期で更新しようかなー。
第一弾として、Adobe の Java Script のフォルダ識別方法について
サブフォルダの中まで処理させるスクリプトを組もうとしていたとき、Folder.getFiles() で取得したオブジェクトが、フォルダかファイルかを識別する方法がないか、いろいろなサイトを見たが、拡張子で判断する等いまいちなものばかり(拡張子の無いファイルが入稿することも度々あるし…)
そんな方法しかないか~と諦めかけていた時、間違えてファイルオブジェクトに対して length を参照したら何か値が得られている……容量でした。へ~ じゃあフォルダはその中の容量計算してくれるの?と、試したら…undefined 残念…でもこれでフォルダを判断できるじゃん♪ ってことで
ファイルオブジェクト.length の戻り値
ファイルの場合はその容量(Byte)
フォルダの場合は undefined
エイリアスの場合は -1
よしフォルダの識別は出来た。サブフォルダを読み込む再起ルーチンはどうすればいいんだ?
第一弾として、Adobe の Java Script のフォルダ識別方法について
サブフォルダの中まで処理させるスクリプトを組もうとしていたとき、Folder.getFiles() で取得したオブジェクトが、フォルダかファイルかを識別する方法がないか、いろいろなサイトを見たが、拡張子で判断する等いまいちなものばかり(拡張子の無いファイルが入稿することも度々あるし…)
そんな方法しかないか~と諦めかけていた時、間違えてファイルオブジェクトに対して length を参照したら何か値が得られている……容量でした。へ~ じゃあフォルダはその中の容量計算してくれるの?と、試したら…undefined 残念…でもこれでフォルダを判断できるじゃん♪ ってことで
ファイルオブジェクト.length の戻り値
ファイルの場合はその容量(Byte)
フォルダの場合は undefined
エイリアスの場合は -1
よしフォルダの識別は出来た。サブフォルダを読み込む再起ルーチンはどうすればいいんだ?
ブログ内検索
プロフィール
HN:
Light Head
年齢:
52
性別:
男性
誕生日:
1972/05/23
職業:
DTPオペレーター
趣味:
バイク、機械いじり、プログラミング
最新記事
(03/09)
(03/09)
(03/09)
(04/29)
(04/22)
P R