スクリプトでのファイルコピーについて。
[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
いつも参考にさせていただいております。
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("ドキュメントが開かれていません");
}
*****以上スクリプト*****
長くなってしまい申し訳ありません。
何か解決策があるようでしたらよろしくお願いします。
[840]Re: スクリプトでのファイルコピーについて。 |
投稿者:偽善者こうちゃん |
投稿日:2008/03/12(Wed) 12:51:27
解決策でなくて申し訳ないのですが、一点だけ。
CS2・MacOS 10.3.9でcopyメソッドを使うとファイルの修正日時がコピーした日時に変更されてしまいます。
CS3・MacOS 10.5.2でどういう挙動になるかわかりませんが、念のため調べてみたほうがいいと思われます。
» 2
CS2・MacOS 10.3.9でcopyメソッドを使うとファイルの修正日時がコピーした日時に変更されてしまいます。
CS3・MacOS 10.5.2でどういう挙動になるかわかりませんが、念のため調べてみたほうがいいと思われます。
[846]Re: スクリプトでのファイルコピーについて。 |
投稿者:buruge |
投稿日:2008/03/13(Thu) 12:05:35
偽善者こうちゃんさん
そこには気がつきませんでした。
こちらでも確認してみたところ、確かに修正日がコピーした日時に変更されていました。
さらに、ファイルサイズにも若干変化があり、だいたいコピーしたファイルの方がやや軽くなっています。
プレビュー画像だったアイコンが、PhotoshopEPSのアイコンに変わっていたりもするので、どうも一度内部で別名保存しているみたいですね。
もしかするとコピーされなかったファイルは、データ上うまく別名保存できないファイルなのかもしれないです。
いかんせん、元々がOS9上で作られていたものを今年一気にOS10+CS3までにバージョンをあげたもので(しかもEPSのまま)あちこちにほころびがあってもおかしくはないのですが…。
どちらにしろ、copyメソッドで純粋にコピーしているわけではないとなると、どんな処理をしているのかを先に確かめた方がいいですね。
ありがとうございました。
そこには気がつきませんでした。
こちらでも確認してみたところ、確かに修正日がコピーした日時に変更されていました。
さらに、ファイルサイズにも若干変化があり、だいたいコピーしたファイルの方がやや軽くなっています。
プレビュー画像だったアイコンが、PhotoshopEPSのアイコンに変わっていたりもするので、どうも一度内部で別名保存しているみたいですね。
もしかするとコピーされなかったファイルは、データ上うまく別名保存できないファイルなのかもしれないです。
いかんせん、元々がOS9上で作られていたものを今年一気にOS10+CS3までにバージョンをあげたもので(しかもEPSのまま)あちこちにほころびがあってもおかしくはないのですが…。
どちらにしろ、copyメソッドで純粋にコピーしているわけではないとなると、どんな処理をしているのかを先に確かめた方がいいですね。
ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)