需要 ExtendScript 在不知道完整文件名的情况下打开文件
Need ExtendScript to open a file without knowing the full file name
ExtendScript 新手,正在尝试完成一个自动化项目。
我有一堆图像要通过脚本在 photoshop 中组合,需要打开基于初始图像的图像配对。我知道配对文件的名称在最后一个字符之前都是可以预测的,此时它将是任何大写字母 A-Z。
例如:
CH-14B1-SP-01-A 可以与 CH-14B1-SP-PV-01-A 配对,但也可以想象与 CH-14B1-SP-PV-01-B 配对。每个配对文件都有一个 A-D 复制,我们选择最好的进行配对。
我有一个脚本需要用户输入来决定要查找的副本。我想自动化这个。我的代码如下所示:
// ask user input for PV replicate letter
var repLetter =prompt("Which PV replicate would you like to use? (A.. B.. C.. etc.)");
// get the info out of the source doc
var fileName = srcDoc.name;
var docName = fileName.substring(0,fileName.length -4);
var filePath = srcDoc.path.toString();
var fileExt = fileName.substring(fileName.length -4, fileName.length);
var nameCheck = fileName.substring(0,fileName.indexOf("CH-14B1-SPI-"));
if (nameCheck <1)
{
var fileNum = fileName.substring(12,fileName.length -5) + repLetter;
// no underscore so we need to open it's namesake
// alert(nameCheck)
var filePair = filePath + "/PV/" + "CH-14B1-SPI-PV-" + fileNum + fileExt;
openThisFile(filePair)
有没有办法让 var repLetter 只接受任何值?
类似
var fileNum = fileName.substring(12,fileName.length -5) + [a-z];
我尝试了上面的方法,希望它能解决问题(这又是一个非常新的方法),但我被告知 "a" 未定义。
你的错误在于
中的语法不正确
var fileNum = fileName.substring(12,fileName.length -5) + [a-z];
...只是语法错误,您似乎将 GREP 混入 JS。发出错误是因为 [...]
表示一个数组, 是 对 'add' 有效的字符串,但是表达式 a-z
("a
minus z
") 需要变量 named a
和 z
。我想您只是想在这里使用某种通配符。
通过根据当前文件名读取候选文件列表来规避整个问题。这有点难以在本地测试,因为它需要大量的虚拟文件(而且我不完全确定我理解你的程序)。不过,下面的大意应该清楚了。
与其提示输入 'any' 字母,不如显示可用选项更便于用户使用。我不知道你是怎么得到候选人名单的,所以我让你自己填。您需要为此调整 getFiles
调用;目前,它从 filePath
读取文件,其名称后带有 *
以获取以 nameCheck
.
开头的所有内容
找到的文件列表显示在一个简单的对话框中,带有单选按钮以从中选择文件。事实上,它只显示一个警报,如果你按 取消 它什么都不做。
请注意,我已经在 InDesign 中测试了这个,而不是在 Photoshop 中,因为它是一个更容易测试脚本的平台,所以可能有些 属性 名称被关闭了。
srcDoc = app.activeDocument;
var fileName = srcDoc.name;
var docName = fileName.substring(0,fileName.lastIndexOf('.'));
var filePath = srcDoc.filePath.toString();
var fileExt = fileName.substring(fileName.lastIndexOf('.')+1);
var nameCheck = fileName.substring(0,fileName.indexOf("CH-14B1-SPI-"));
var filelist = Folder(filePath).getFiles (nameCheck+'*.'+fileExt).sort();
if (filelist.length == 0)
{
alert ('No files found matching '+nameCheck+'*.'+fileExt);
} else
{
var fileDialog = app.dialogs.add({name:"Choose a file", canCancel:true});
with (fileDialog)
{
with(dialogColumns.add())
{
with (fileSel = radiobuttonGroups.add())
{
radiobuttonControls.add({staticLabel:filelist[i].name,checkedState:i==0});
}
}
}
if (fileDialog.show() == true)
{
alert ('you picked '+filelist[fileSel.selectedButton].name);
}
}
ExtendScript 新手,正在尝试完成一个自动化项目。
我有一堆图像要通过脚本在 photoshop 中组合,需要打开基于初始图像的图像配对。我知道配对文件的名称在最后一个字符之前都是可以预测的,此时它将是任何大写字母 A-Z。
例如:
CH-14B1-SP-01-A 可以与 CH-14B1-SP-PV-01-A 配对,但也可以想象与 CH-14B1-SP-PV-01-B 配对。每个配对文件都有一个 A-D 复制,我们选择最好的进行配对。
我有一个脚本需要用户输入来决定要查找的副本。我想自动化这个。我的代码如下所示:
// ask user input for PV replicate letter
var repLetter =prompt("Which PV replicate would you like to use? (A.. B.. C.. etc.)");
// get the info out of the source doc
var fileName = srcDoc.name;
var docName = fileName.substring(0,fileName.length -4);
var filePath = srcDoc.path.toString();
var fileExt = fileName.substring(fileName.length -4, fileName.length);
var nameCheck = fileName.substring(0,fileName.indexOf("CH-14B1-SPI-"));
if (nameCheck <1)
{
var fileNum = fileName.substring(12,fileName.length -5) + repLetter;
// no underscore so we need to open it's namesake
// alert(nameCheck)
var filePair = filePath + "/PV/" + "CH-14B1-SPI-PV-" + fileNum + fileExt;
openThisFile(filePair)
有没有办法让 var repLetter 只接受任何值?
类似
var fileNum = fileName.substring(12,fileName.length -5) + [a-z];
我尝试了上面的方法,希望它能解决问题(这又是一个非常新的方法),但我被告知 "a" 未定义。
你的错误在于
中的语法不正确var fileNum = fileName.substring(12,fileName.length -5) + [a-z];
...只是语法错误,您似乎将 GREP 混入 JS。发出错误是因为 [...]
表示一个数组, 是 对 'add' 有效的字符串,但是表达式 a-z
("a
minus z
") 需要变量 named a
和 z
。我想您只是想在这里使用某种通配符。
通过根据当前文件名读取候选文件列表来规避整个问题。这有点难以在本地测试,因为它需要大量的虚拟文件(而且我不完全确定我理解你的程序)。不过,下面的大意应该清楚了。
与其提示输入 'any' 字母,不如显示可用选项更便于用户使用。我不知道你是怎么得到候选人名单的,所以我让你自己填。您需要为此调整 getFiles
调用;目前,它从 filePath
读取文件,其名称后带有 *
以获取以 nameCheck
.
找到的文件列表显示在一个简单的对话框中,带有单选按钮以从中选择文件。事实上,它只显示一个警报,如果你按 取消 它什么都不做。
请注意,我已经在 InDesign 中测试了这个,而不是在 Photoshop 中,因为它是一个更容易测试脚本的平台,所以可能有些 属性 名称被关闭了。
srcDoc = app.activeDocument;
var fileName = srcDoc.name;
var docName = fileName.substring(0,fileName.lastIndexOf('.'));
var filePath = srcDoc.filePath.toString();
var fileExt = fileName.substring(fileName.lastIndexOf('.')+1);
var nameCheck = fileName.substring(0,fileName.indexOf("CH-14B1-SPI-"));
var filelist = Folder(filePath).getFiles (nameCheck+'*.'+fileExt).sort();
if (filelist.length == 0)
{
alert ('No files found matching '+nameCheck+'*.'+fileExt);
} else
{
var fileDialog = app.dialogs.add({name:"Choose a file", canCancel:true});
with (fileDialog)
{
with(dialogColumns.add())
{
with (fileSel = radiobuttonGroups.add())
{
radiobuttonControls.add({staticLabel:filelist[i].name,checkedState:i==0});
}
}
}
if (fileDialog.show() == true)
{
alert ('you picked '+filelist[fileSel.selectedButton].name);
}
}