首页 > 解决方案 > 自动将目标文件夹中的所有脚本包含在已运行的脚本中 - CS6

问题描述

我想在运行的脚本中动态地#include从目标文件夹中获取所有脚本。无需每次都写出每个脚本名称/路径。这意味着:=>您将任何脚本放入目标文件夹=>当您运行脚本时,来自目标的脚本/脚本会自动包含到运行的脚本中。


编辑:您还可以从任何范围内的注入代码中调用任何函数或变量。

到目前为止,我写了这个脚本:

var runnedScriptPath = $.fileName;
var runnedScriptFolderPath = getScriptFolder(runnedScriptPath);

var targetScriptsFolderPath = runnedScriptFolderPath + "/foo";
var targetScriptsFolder = Folder(targetScriptsFolderPath);

includeScriptsFromTargetFolder(targetScriptsFolder);

function includeScriptsFromTargetFolder(targetFolder) {

    var targetFolderFiles = targetFolder.getFiles();

    var scriptFilesToInclude = new Array;

    for (var i = 0; i < targetFolderFiles.length; i++) {
        if (targetFolderFiles[i] instanceof File) {
            if (targetFolderFiles[i].toString().match(/.jsx$/)) { // .jsx is extension from Adobe's scripts
                scriptFilesToInclude.push(decodeURIComponent(targetFolderFiles[i]) ); // decodeURIComponent method is used becouse path is URl
            }
        }
    }

    for (var i = 0; i < scriptFilesToInclude.length; i++) {
        #include scriptFilesToInclude[i]; // <=====  this line gives error!
    }

}

function getScriptFolder(scriptPath) {
    return scriptPath.match(/^(.*[\\\/])/g); // match(/^(.*[\\\/])/g) "Select everything before the last forward slash" //
}


但是后来我得到了这个错误:我在第 235 页的“预处理器指令”一章 中的javascript 工具指南 cs6.pdf中找不到任何合理的解决方案。 我的理由是:结果是字符串,所以它应该被视为. 然后将字符串路径加载到脚本中。但不是它,我想它试图在已运行脚本的文件夹中找到一个名为: 的文件。

在此处输入图像描述




scriptFilesToInclude[i]"some path/runned code folder/foo/bar.jsx"scriptFilesToInclude[i]

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

注意:

我尝试使用eval
eval("#include scriptFiles[i]");
以及JSON.pars()
JSON.parse("#include scriptFiles[i]");
绕过错误,但它也不起作用。

提前感谢您的帮助。

标签: javascriptphotoshopphotoshop-script

解决方案


使用$.evalFile()代替eval()

$.evalFile(scriptFiles[i]);

推荐阅读