コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

066.【Id】選択しているリンクのファイル名を変更する

挙動

  1. リンクを選択した状態で起動する
  2. リンクが正常な状態かチェック
  3. ダイアログが表示されるので新しい名前を入力する
  4. リンクデータのファイル名が変更される
  5. リンクが繋ぎなおされる

コード

var main = function() {
    app.scriptPreferences.enableRedraw = false;
    if (app.selection.length === 0) {
        alert("リンクを1つ選択してください。");
        exit();
    }
    var sel = app.selection[0];
    if (!sel.properties.itemLink) {
        alert("リンクを選択してください。");
        exit();
    }
    var myLink = sel.properties.itemLink;
    if (myLink.status !== LinkStatus.NORMAL) {
        alert("リンクが最新の状態ではないか埋め込みです。\n中断します。");
        exit();
    }
    var myLinkName = myLink.name;
    var myLinkFobj = new File(myLink.filePath);
    var fld = myLinkFobj.parent;
    var format = myLinkName.slice(myLinkName.lastIndexOf(".")); //ファイル形式
    var newName = prompt("新しい名前を入力してください", myLinkName.replace(/\..+?$/, ""), "リンクファイル名変更スクリプト");
    if (!newName) { //キャンセルされた場合
        exit();
    }
    var newpath = fld + "/" + newName + format;
    if (new File(newpath).exist) { //同名ファイルがあった場合
        alert("同名のファイルがあるため中断します");
        exit();
    }
    var rename = myLinkFobj.rename(newpath);
    if (!rename) {
        alert("リネームできませんでした"); //ファイル名に使用できない文字を指定した場合など
        exit();
    }
    myLink.relink(new File(newpath));
    alert("完了しました");
}

app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.FAST_ENTIRE_SCRIPT, "リンクファイル名変更スクリプト");

メモ

InDesign上で取消し(ctrl+Z)しても、リンクデータのファイル名は元に戻らない。
EventListnerを利用すれば、取消しを実行したときにファイル名も元に戻すようにできるのかもしれないけれど、そこまでする必要はないかな…。