Javascript: Как да преминавате през файлове

Създавам Illustrator CS6 Javascript, който прави следното:

  1. Отворете папка с файлове на Illustrator
  2. Отворете всеки файл в папката (тези файлове се наричат ​​изходни файлове)
  3. Изберете цялото съдържание на изходния файл
  4. Копирайте съдържанието на изходния файл
  5. Създайте нов целеви файл Поставете това съдържание в целевия файл като нов слой
  6. Уверете се, че новият слой има същото име като стария изходен файл

Скриптът ми работи с изключение на това, че не преминава правилно през файловете в изходната папка. Вместо това работи добре на първия изходен файл. Но след това безкрайно просто поставя втория изходен файл в целевия документ (т.е. не се премества върху нито един от другите изходни файлове). Просто безкрайно се поставя и затова трябва да се откажа насила!

Как мога да го накарам да премине правилно през папките и след това да премине към следващия файл.

Ето моят код:

// JavaScript Document
//Set up vairaibles
var destDoc, sourceDoc, sourceFolder, newLayer;

// Select the source folder.
sourceFolder = Folder.selectDialog('Select the folder with Illustrator files that you want to mere into one', '~');
destDoc = app.documents.add();

// If a valid folder is selected
if (sourceFolder != null) {
    files = new Array();

    // Get all files matching the pattern
    files = sourceFolder.getFiles();

    if (files.length > 0) {
        // Get the destination to save the files
        for (i = 0; i < files.length; i++) {
            sourceDoc = app.open(files[i]); // returns the document object
            var myLayers = sourceDoc.layers; // Select All layers in Active Document
            //Go through all layers of source document and copy artwork
            for (i = 0; i < myLayers.length; i++) {
                myLayers[i].hasSelectedArtwork = true;
            };

            with(sourceDoc) {
                var count = pageItems.length;
                for (var i = 0; i < count; i++) {
                    pageItems[i].selected = true;
                }
                redraw();
                copy();
                for (var i = 0; i < count; i++) {
                    pageItems[i].selected = false;
                }


            }

            //Create a new title variable that has the title of the source document
            var title = sourceDoc.name;
            var title = title.substring(0, title.length - 4); //(remove extension from name)
            //Close the Source Document
            sourceDoc.close(SaveOptions.DONOTSAVECHANGES);

            //Open the Destination Document and create a new layer in it that is named after the title variation
            newLayer = destDoc.layers.add();
            newLayer.name = title;

            //Paste into this new layer
            newLayer = app.paste();

        }
    }
    else {
        alert('No matching files found');
    }
}

Пс. Не бях сигурен дали да публикувам това в Преглед на код или Графичен дизайн, но мисля, че Stack overflow е най-доброто място за публикуване на това, тъй като това е общ въпрос относно зациклянето на JavaScript, така че се надявам, че това е правилното място.


person big_smile    schedule 07.04.2014    source източник


Отговори (1)


Изглежда, че използвате "i" за променливата във всеки от вашите цикли, като му давате набор от неочаквани стойности в други цикли, които също използват същата променлива. Бих опитал да използвам отделна променлива за всеки цикъл. напр. за j=0, за k=0, за l=0 и т.н.

person nollaf126    schedule 02.10.2015