如何检查打开的文件是否保存在驱动器上 - 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);
我想编写一个函数,从打开的文档创建文件数组,这些文档位于硬盘驱动器的任何位置。
我不想要那个数组中没有保存在任何地方的文件。换句话说,文件如:文件-> 新建-> 创建一些文件-> 不将此文件保存在任何地方。
到目前为止,我创建了这段代码:
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);