[FIXED] Fügen Sie automatisch alle Skripte aus dem Zielordner in das Runned Skript – CS6 ein

Ausgabe

Ich möchte #includealle Skripte aus dem Zielordner dynamisch in das ausgeführte Skript einfügen. Ohne jedes Mal jeden Skriptnamen /Pfad aufschreiben zu müssen. Das bedeutet: => Sie ziehen ein beliebiges Skript in den Zielordner => Wenn Sie ein Skript ausführen, werden Skripte/Skripte vom Ziel automatisch in das ausgeführte Skript eingeschlossen.


BEARBEITEN: Sie können auch beliebige Funktionen oder Variablen aus injiziertem Code in jedem Bereich aufrufen.


Ich habe bisher dieses Skript geschrieben:

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

Aber dann bekam ich diesen Fehler: Ich konnte keine vernünftige Lösung in Javascript Tools Guide cs6.pdf im Kapitel “Präprozessor-Direktiven”, Seite 235
finden.

Meine Begründung ist: Das
Ergebnis ist eine Zeichenfolge, also sollte es als behandelt werden . Und dann wird der String-Pfad in das Skript geladen. Aber stattdessen hat es wohl versucht, eine Datei im Ordner des ausgeführten Skripts mit dem Namen zu finden: .

Geben Sie hier die Bildbeschreibung ein


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

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

Hinweise:


Ich habe versucht,
eval :
eval("#include scriptFiles[i]");

Und auch
JSON.pars() :
JSON.parse("#include scriptFiles[i]");

Um Fehler zu umgehen, aber es hat auch nicht funktioniert.


Vielen Dank im Voraus für jede Hilfe.

Lösung

Wie @Sergey Kritskiy bereits erwähnt hat, muss die $.evalFile()Funktion verwendet werden.
Es muss jedoch im globalen Bereich aufgerufen werden, um Variablen oder Funktionen aus der enthaltenen Datei überall dort hochladen zu können, wo Sie sie benötigen.

Code:

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


Beantwortet von –
Lukkar


Antwort geprüft von –
Senaida (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like