2014-09-04 126 views
0

首先让我告诉你,我只有基本的编程经验,但我几乎是MaxScript(Autodesk 3ds max脚本语言)的专业人员。现在,我开始写的Photoshop脚本基本上执行以下操作:Photoshop javascript遍历文件夹层次结构向上

1)操纵开放PSD文档以某种方式

2)保存该文件为TIFF在特定相对的文件夹PSD文件的位置。

所以我们说的PSD文件在文件夹C /项目/后期制作/工作/ workingSubfolder

然后TIFF文件应在文件夹中C /项目/后期制作/导出/ exportSubfolder

重要的事情是:

  • “工作”和“出口”的文件夹都在同一水平上
  • 有时候不存在“workingSubfolder”文件夹,有时 更多。不可预测。
  • 脚本需要复制“导出”文件夹中“工作”文件夹的文件夹结构,但显然将TIFF保存在那里而不是PSD。

我现在需要的是从PSD文件向上遍历层次结构,直到找到名为“export”的文件夹。然后进入该“导出”文件夹,在那里复制“工作”文件夹内的结构,如果该结构不存在,然后在那里保存与PSD文件具有相同名称的TIF文件。

我在interwebs中发现了一个关于遍历文件夹树的递归向下的吨,但没有向上。也许我在找错?我觉得这对于任何像样的程序员来说都是一个极其简单的问题。

+0

穿越算法_DOWN_通常需要从文件系统中读取数据 - 但既然你有一个现有路径已经想去“上”在这里,排在首位,这需要基本的字符串操作 - 在分割你的路径'/ ',并以相反的顺序遍历该分割的结果,直到找到名为'export'的路径段。只有在那之后,你需要再次“下” - 那时候你已经知道下面这些文件夹的名字了,所以这是检查文件系统中是否已经存在,以及是否已经创建它们的问题。 – CBroe 2014-09-04 13:08:03

+0

但是,这不应该在任何时候都需要递归,因为这里只有一个“扁平的”一维数据结构 - 只是按照定义的顺序有几个路径段。 – CBroe 2014-09-04 13:09:07

回答

0

像这样的东西应该让你开始......基本上它只是简单地计算出什么输出路径应该从当前文档路径进行一些战略替换。如果您确实需要更多地使用文件系统对象,请参阅Photoshop安装目录中的“Javascript工具指南”。

var workingPath = app.activeDocument.path.toString(); 
var exportPath = workingPath.replace('working', 'export'); 
var filename = app.activeDocument.name.toString().replace('.psd', '.tif'); 
var folder = new Folder(exportPath); 

if (!folder.exists) 
    folder.create(); 

var options = new TiffSaveOptions; 
//set any options you need to here.... 

var exportFile = new File(exportPath + '/' + filename) 

app.activeDocument.saveAs(exportFile, options) 
+0

哦,我的天啊,太简单了。我真的没有想到,我可以用“出口”取代“工作”,它可以解决所有的麻烦。非常感谢:-) – 2014-09-04 15:27:46