Javascript 自动将目标文件夹中的所有脚本包含在runned script-CS6中

Javascript 自动将目标文件夹中的所有脚本包含在runned script-CS6中,javascript,photoshop,photoshop-script,Javascript,Photoshop,Photoshop Script,我想在运行的脚本中动态地包含目标文件夹中的所有脚本。无需每次写出每个脚本的名称/路径这意味着:=>将任何脚本放入目标文件夹=>运行脚本时,来自目标的脚本/脚本将自动包含到运行的脚本中 编辑:您还可以在任何范围内从注入的代码段调用任何函数或变量。 到目前为止,我写了这个脚本: var runnedScriptPath=$.fileName; var runnedScriptFolderPath=getScriptFolder(runnedScriptPath); var targetScrip

我想在运行的脚本中动态地包含目标文件夹中的所有脚本。无需每次写出每个脚本的名称/路径

这意味着:
=>将任何脚本放入目标文件夹=>运行脚本时,来自目标的脚本/脚本将自动包含到运行的脚本中

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

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

var runnedScriptPath=$.fileName;
var runnedScriptFolderPath=getScriptFolder(runnedScriptPath);
var targetScriptsFolderPath=runnedScriptFolderPath+“/foo”;
var targetScriptsFolder=文件夹(targetScriptsFolderPath);
IncludeDescriptsFromTargetFolder(targetScriptsFolder);
函数includeDescriptsFromTargetFolder(targetFolder){
var targetFolderFiles=targetFolder.getFiles();
var scriptFilesToInclude=新数组;
对于(var i=0;i$.evalFile()
而不是
eval()


正如@Sergey Kritskiy在前面提到的,它必须用于
$.evalFile()
函数。
但它需要在全局范围内调用,以便能够从所包含的文件中在需要的任何位置上载变量或函数。

代码:

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

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

var scriptsToInclude = includeScriptsFromTargetFolder(targetScriptsFolder);

for (var i = 0; i < scriptsToInclude.length; i++) { 
    $.evalFile(scriptsToInclude[i]); // <========= this function has to be invoked in global scope
}

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
            }
        }
    }

    return scriptFilesToInclude;
}

function getScriptFolder(scriptPath) {

    return scriptPath.match(/^(.*[\\\/])/g); // match(/^(.*[\\\/])/g) "Select everything before the last forward slash" //
}
var runnedScriptPath=$.fileName;
var runnedScriptFolderPath=getScriptFolder(runnedScriptPath);
var targetScriptsFolderPath=runnedScriptFolderPath+“/foo”;
var targetScriptsFolder=文件夹(targetScriptsFolderPath);
var scriptsToInclude=includeDescriptsFromTargetFolder(targetScriptsFolder);
对于(var i=0;i$.evalFile(脚本包含[i]);//我看到我得到了否决票,有人能说这个问题出了什么问题吗?这个问题的格式很好。我不知道你为什么会得到否决票。我只想指出,
#include
不是JavaScript关键字。是你正在使用的引擎中的特定关键字。我猜它进行静态分析,不包括script动态。它只是在
#include
之后获取字符串并加载它。作为一个特定的古怪引擎,我想如果可能的话,包含dynamic并不容易。“作为一个特定的古怪引擎,我想包含dynamic并不容易。”顺便说一句,如果有人回答某件事是不可能做到的,并且他证明了这一点,那么根据stackoverflow的标准,问题是否得到了解决?是的,当然,不要误解我的意思。我的意思是,我在这里看到了很多没有答案的问题,而这一个似乎很难找到人,没有更多的了,哈哈。顺便说一下,似乎有人我不知道他在下面说了些什么。好吧,乍一看是有效的,但我问的并不是那么准确。也许这个问题不够精确(我为此进行了编辑)。我测试了什么,根据第219页的文档。$.evalFile()执行脚本并返回求值结果。而不是脚本本身。以后不能使用该脚本中的函数和变量。可以。这将执行脚本,其所有函数都将可用。但使用带有动态变量的
#include
将不起作用。好的,我在您编写的示例中进行了测试,它可以工作,但是它不在我的中(它仍然找不到var或函数),。听起来有一些范围问题。好的,当我从函数中获取它时,它已经开始工作了。所以它是范围问题。感谢帮助。不要忘记接受,这样其他人才能更快地找到答案。它需要在你想要使用函数/变量的同一个范围内调用:js中到处应用的相同规则。
$.evalFile(scriptFiles[i]);
var runnedScriptPath = $.fileName;
var runnedScriptFolderPath = getScriptFolder(runnedScriptPath);

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

var scriptsToInclude = includeScriptsFromTargetFolder(targetScriptsFolder);

for (var i = 0; i < scriptsToInclude.length; i++) { 
    $.evalFile(scriptsToInclude[i]); // <========= this function has to be invoked in global scope
}

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
            }
        }
    }

    return scriptFilesToInclude;
}

function getScriptFolder(scriptPath) {

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