スクリプトでのファイルコピーについて。

[796]スクリプトでのファイルコピーについて。 | 投稿者:buruge | 投稿日:2008/03/06(Thu) 17:05:26
はじめまして。
いつも参考にさせていただいております。

OS10.5.2 InDesign CS3にて作業しています。

ページ単位でリンク画像の収集をしなければならない作業が発生し、パッケージ機能ではそれに対応しづらかったのでjavascriptにてスクリプトを作成しています。
収集先フォルダを指定しその中にページ名のフォルダを作成、そこにリンクファイルをコピーする流れです。

しかしながら、収集できるものとできないものがあってうまく動きません。
調べてみたところ、コピー元となるファイルオブジェクトを作成する際、itemLink.filePathで取得したファイルパスの直前に「/Applications/AdobeInDesignCS3/AdobeInDesignCS3.app/Contents/MacOS/」というパスが入ってしまい正常なコピー元を把握できていないのだと分かりました。
itemLink.filePathで取得するパスの階層が":"で、フォルダを作成する際の階層が"/"だったので、ファイルパスを"/"に変換してからファイルオブジェクトを変換してみました。(そうしなくてもコピーされるものはされていたのですが)
すると「/Applications/...」は入らずにきちんとコピー元を把握できているみたいなのですが、それでもコピーに失敗してしまいます。
日本語名でも英数字名でも現象は同じです。
同じリンクファイルで、別ページではきちんとコピーされているものもあったりするので、ファイル名の問題ではないとは思うのですが、ここまで来るとちょっと何が原因か分からなくなってきました。

*****以下スクリプト*****

if(app.documents.length != 0){
folderName = Folder.selectDialog("収集先のフォルダを選択");
if(!folderName){
exit();
}
pageObj = app.activeDocument.pages;
for(i=0;i<pageObj.length;i++){
   pageFolder = pageObj[i].name;
   folderPath = new Folder(folderName+"/"+pageFolder);
   flag = folderPath.create();
   if(flag){
       if(pageObj[i].allGraphics.length>0){
           for(j=0;j<pageObj[i].allGraphics.length;j++){
               try{
                       fp = pageObj[i].allGraphics[j].itemLink.filePath;
                       uriTxt = fp.split (":");
                       fpTxt = "/";
                       for(n=0;n<(uriTxt.length-1);n++){
                           fpTxt = fpTxt + uriTxt[n] +"/";
                       }
                       fpTxt = fpTxt + uriTxt[n];
               }catch(e){}
               mFileObj = new File(fpTxt);
               mFileName = mFileObj .name;
               cFileObj = new File(folderPath+"/"+mFileName);
               cFlg = mFileObj.copy(cFileObj);
               if(cFlg==true){
                   alert(pageObj[i].name+"ページの"+mFileObj+"をコピーしました");
               }else{    
                   alert(pageObj[i].name+"ページの"+mFileObj+"がコピーできません");
               }
           }
       }
   }else{
       alert("フォルダが作成できません");
   }
}
alert("収集完了");
}else{
   alert("ドキュメントが開かれていません");
}

*****以上スクリプト*****

長くなってしまい申し訳ありません。
何か解決策があるようでしたらよろしくお願いします。
» 1
[840]Re: スクリプトでのファイルコピーについて。 | 投稿者:偽善者こうちゃん | 投稿日:2008/03/12(Wed) 12:51:27
解決策でなくて申し訳ないのですが、一点だけ。
CS2・MacOS 10.3.9でcopyメソッドを使うとファイルの修正日時がコピーした日時に変更されてしまいます。
CS3・MacOS 10.5.2でどういう挙動になるかわかりませんが、念のため調べてみたほうがいいと思われます。
» 2
[846]Re: スクリプトでのファイルコピーについて。 | 投稿者:buruge | 投稿日:2008/03/13(Thu) 12:05:35
偽善者こうちゃんさん

そこには気がつきませんでした。
こちらでも確認してみたところ、確かに修正日がコピーした日時に変更されていました。
さらに、ファイルサイズにも若干変化があり、だいたいコピーしたファイルの方がやや軽くなっています。
プレビュー画像だったアイコンが、PhotoshopEPSのアイコンに変わっていたりもするので、どうも一度内部で別名保存しているみたいですね。

もしかするとコピーされなかったファイルは、データ上うまく別名保存できないファイルなのかもしれないです。
いかんせん、元々がOS9上で作られていたものを今年一気にOS10+CS3までにバージョンをあげたもので(しかもEPSのまま)あちこちにほころびがあってもおかしくはないのですが…。

どちらにしろ、copyメソッドで純粋にコピーしているわけではないとなると、どんな処理をしているのかを先に確かめた方がいいですね。
ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア