Javascript: как перебирать файлы в цикле


Я делаю иллюстратор 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');
    }
}

ПС. Я не был уверен, что Я должен опубликовать это в Code Review или Graphic Design, но я думаю, что переполнение стека-лучшее место для публикации этого, так как это общий вопрос о циклировании javascript, поэтому я надеюсь, что это правильное место.

1 2

1 ответ:

Похоже, что вы используете "i" для переменной в каждом из ваших циклов, давая ей диапазон неожиданных значений в других циклах, которые также используют ту же переменную. Я бы попробовал использовать отдельную переменную для каждого цикла. Например, для j=0, для k=0, для l=0 и т. д.