如何检查打开的文件是否保存在驱动器上 - CS6 脚本

How to check if opened file is saved on drive - CS6 script

我想编写一个函数,从打开的文档创建文件数组,这些文档位于硬盘驱动器的任何位置。

我不想要那个数组中没有保存在任何地方的文件。换句话说,文件如:文件-> 新建-> 创建一些文件-> 不将此文件保存在任何地方。

到目前为止,我创建了这段代码:

var docsExistingOnDrive = filteringOpenedDocs();

alert(docsExistingOnDrive);

function filteringOpenedDocs() {

  var imageTypes = [
  /.png$/,
  /.psd$/,
  /.jpg$/,
  /.tif$/,
  /.bmp$/,
  /.gif$/,
  ];

  var openedDocsToProcess = new Array;

  for (var i = 0; i < app.documents.length; i++) {
      for ( var j = 0 ; j < imageTypes.length; j++ ) {
          if ( app.documents[i].name.match(imageTypes[j]) ) {
              openedDocsToProcess.push(app.documents[i]);
          };
      }
  }

  return openedDocsToProcess;
}

我注意到文档尚未保存,名称中没有任何扩展名(png.psd. 等)。所以我用这个 属性 来过滤文件。

但是我也发现了用户可以创建文件名的场景中的错误 (new document)带有扩展名(png.psd. 等)。
结果我在 if (app.documents[i].name.match(imageTypes[j]) 条件下得到假阳性结果。然后它将一个未保存在驱动器上任何位置的文件添加到数组 openedDocsToProcess.

============================================= ==============================

备注:

而不是使用 if ( app.documents[i].name.match(imageTypes[j]) 条件:

1. 我尝试在 -> if (app.documents[i].exists) 中使用 exists 方法,但 app.documents[i].exists 总是给出 undefined

2. 我尝试在 -> app.documents[i].path !== null 中使用 path 方法,但随后出现下面的“error 8103”,脚本终止。



在此先感谢。

app.documents returns Document 个对象的数组。

这个对象已经有一个漂亮的 属性 适合您的用例:fullName

如果文件没有保存在硬盘的某个地方,那么这个 属性 就没有价值。 不幸的是,如果您尝试从未保存的文档中检索它,您将收到一个带有错误消息的弹出窗口 - 本质上是终止脚本。

要解决此问题,您可以将 fullName 的检索包装在 try-catch 块中,如果尝试没有失败,只需将文档添加到 openedDocsToProcess 数组。

var openedDocsToProcess = new Array;
var failed=false;
var temp;
for (var i = 0; i < app.documents.length; i++) 
{
    try 
    {
        failed=false;
        temp=app.documents[i].fullName;
    }
    catch(e)
    {
        failed=true;
    }
    if(!failed)
    {
        openedDocsToProcess.push(app.documents[i]);
    }
}
alert(openedDocsToProcess);