007.【ID】リンク先が同階層のLinkフォルダ内でなかったらアラート
追記(2021/09/13)
書き直しました。
書いたコード
var myDoc = app.activeDocument; if (!myDoc.saved) { alert("保存して") } else { var inddFolder = myDoc.filePath.fsName; var inddFolderReg = inddFolder.split("\\").join("\\\\") var myLinks = myDoc.links; var LinksLen = myLinks.length; var logTxt = ""; for (var i = 0; i < LinksLen; i++) { var correctPathReg = new RegExp(inddFolderReg + "\\\\(L|l)inks*\\\\" + myLinks[i].name) switch (myLinks[i].status) { case LinkStatus.LINK_MISSING: // リンク先がない logTxt = logTxt + myLinks[i].name + " リンク先がない\n"; break; case LinkStatus.LINK_INACCESSIBLE: // URL/画像のパスにアクセスできない logTxt = logTxt + myLinks[i].name + " アクセスできない\n"; break; case LinkStatus.LINK_OUT_OF_DATE: // 画像の更新が必要 if (myLinks[i].filePath != correctFolder + myLinks[i].name) { logTxt = logTxt + myLinks[i].name + " " + myLinks[i].filePath + " 要更新\n"; } else { logTxt = logTxt + myLinks[i].name + " 要更新\n"; } case LinkStatus.NORMAL: // 最新状態 if (!correctPathReg.test(myLinks[i].filePath)) { logTxt = logTxt + myLinks[i].name + " " + myLinks[i].filePath + "\n"; } break; } } } if (logTxt == "") { alert("リンクは正常でした") } else { alert(logTxt) }
メモ
分かったこと
- documentのfullNameとfileNameはファイルオブジェクト
- ○「case LinkStatus.LINK_MISSING」
×「case LINK_MISSING」
分からなかったこと
- LINK_INACCESSIBLE
「URL/画像のパスにアクセスできない」とはどんな状態?
フォルダにパスワードがかかってるとか? - myDoc.filePathはフォルダ?ファイル?
データブラウザを見ると[Folder]となっているが、オブジェクトモデルビューアで「filePath」を検索すると「Data Type : File」と記載されている。 - documentのfullNameとfileNameの違い
- 正規表現
リンクのfilePathからフォルダ名だけを取得したかったのだけど、↓がうまいこといかなかった("C:\Users\aaa\Desktop\Link\a.psd"→"C:"みたいに最長一致になってしまった)。
myLinks[i].filePath.replace(/\\.+?$/,"") // "C:\Users\aaa\Link\a.psd" → "C:\Users\aaa\Link" にしたい
積み残し
- LinkStatus.LINK_INACCESSIBLEのときのテストできてない
- 毎度ながらやり口がスマートじゃない…リンクのパス(文字列)とフォルダオブジェクトを比較するやり方、もっとうまい方法がありそう。