Javascript:如何遍历文件

big*_*ile 4 javascript loops adobe-illustrator

我正在制作执行以下操作的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');
    }
}
Run Code Online (Sandbox Code Playgroud)

附言 我不确定是否应该在Code ReviewGraphic Design中发布此内容,但我认为Stack溢价是发布此内容的最佳位置,因为这是有关javascript循环的一个普遍问题,所以我希望这是正确的位置。

nol*_*126 5

似乎您在每个循环中都对变量使用“ i”,从而在其他也使用相同变量的循环中为它提供了一系列意外值。我会尝试为每个循环使用单独的变量。例如,j = 0,k = 0,l = 0等。