проверка системной папки extendscript

Я пытаюсь построить диалог, который поможет с организацией. По сути, это извлечение всех папок из папки наших проектов, сортировка их имен и помещение их в раскрывающийся список. Затем пользователь выберет любой проект, над которым он работает, введет свои инициалы, добавит краткое описание и, наконец, добавит номер версии 001. В приведенном ниже сценарии у меня все работает нормально. Примером может быть

XXXPROJECTNAME_XXXINTIALS_XXXDESCRIPTION_001.aep

/Volumes/Nacho/Multimedia/PROJECTS/ABC_123_Teaser/01_AE/DW/ABC_123_Teaser_DW_TEST_001.aep

и мы бы поместили это в инициализированную папку внутри нашей файловой структуры, так что /Volumes/Nacho/Multimedia/PROJECTS/ABC_123_Teaser/01_AE/DW.

Мне нужна помощь, чтобы проверить, существует ли уже папка, и если это не так, создайте папку. Я всегда буду знать, где должна быть папка (/Volumes/Nacho/Multimedia/PROJECTS/ABC_123_Teaser/01_AE/DW), поэтому мне нужен способ проверить ее на соответствие другому массиву вызываемых папок. Я чувствую, что моя логика надежна, но навыки кодирования — нет.

Если папка существует, нам нужно проверить и посмотреть, существует ли уже имя файла в этой папке. Если это не так, сохраните с текущим именем, но если оно существует, увеличьте его с 001 до 002.

Супер бонусные баллы, если кто-нибудь может объяснить, как заставить работать индикатор выполнения во время сортировки списка папок. У меня есть около 125 папок для сортировки, что занимает около 7 секунд. Как у меня сейчас, индикатор выполнения делает свое дело около 7 секунд, а затем список сортируется еще 7 секунд. На данный момент индикатор выполнения - наименьшая из моих проблем.

win=new Window("palette","AE Naming",[0,0,525,60],{resizeable:true,});
panel_1=win.add("panel",[5,5,525,57]);
downlist_1=panel_1.add("dropdownlist",[5,25,185,46] ,["PROJECT LIST"]);
edittext_1=panel_1.add("edittext",[190,25,250,45] ,"INITIALS",{readonly:0,noecho:0,borderless:0,multiline:0,enterKeySignalsOnChange:1});
edittext_2=panel_1.add("edittext",[255,25,380,45] ,"DESCRIPTION",{readonly:0,noecho:0,borderless:0,multiline:0,enterKeySignalsOnChange:1});
edittext_3=panel_1.add("edittext",[385,25,435,45] ,"001",{readonly:0,noecho:0,borderless:0,multiline:0,enterKeySignalsOnChange:1});
edittext_4=panel_1.add("edittext",[5,2,435,22] ,"FULL PATH NAME",{readonly:1,noecho:0,borderless:0,multiline:0,enterKeySignalsOnChange:1});
but_1=panel_1.add("button",[440,2,510,45],"SAVE");
progress_1=panel_1.add("progressbar", [5,0,510,5], 0, 100);

win.center();
win.show();

but_1.onClick = function() {
                        save();
                    }
{

var layerNameArray = new Array();    
var myFolder = Folder("/Volumes/Nacho/Multimedia/PROJECTS/"); //Search for all Folders in the projects directory
var myJPGFilesArray = myFolder.getFiles(function(f) {return f instanceof Folder});


if(myJPGFilesArray !== null){  
for(var n=0; n<myJPGFilesArray.length;n++){  
    $.writeln(myJPGFilesArray[n].name);  
var test = myJPGFilesArray.toString().replace (new RegExp("%20", "g"), " "); //removes the %20 which are spaces
     layerNameArray.push(myJPGFilesArray[n].name); //adds Folders to the Array
var sortMe = myJPGFilesArray.sort(); //Alphabetical sort

//////////////PROGRESSBAR ESTIMATED TIME//////////////
    while(progress_1.value < progress_1.maxvalue)
    {
        // this is what causes the progress bar increase its progress
        progress_1.value++; 
        $.sleep(35); //35 is about 7 seconds
    }
    $.writeln("Sorting Complete");
///////////////////////////////////////////////////////

     downlist_1.add("item", sortMe[n].name); //Adds sorted Folders to the dropdownlist

downlist_1.onChange = function () {(downlist_1.selection)}
edittext_1.onChanging = function () {(edittext_1.text)}
edittext_2.onChanging = function () {(edittext_2.text)}
edittext_3.onChanging = function () {(edittext_3.text)}

 function save() {

//var combined = ("Volumes/Nacho/Multimedia/PROJECTS/" + downlist_1.selection + "/01_AE/" + edittext_1.text + "");
var aa = downlist_1.selection.toString(); //PROJECT
var bb = edittext_1.text.toString(); //INITIALS
var cc = edittext_2.text.toString(); //DESCRIPTION
var dd = edittext_3.text.toString(); //VERSION
var ae = "/01_AE/"; //where intials fodler should live
var slash = "/"
var underscore = "_"
var aep = ".aep"
var macVolume = "/Volumes/Nacho/Multimedia/PROJECTS/";
var folderpath = macVolume+aa+ae+bb;
var fullpath = macVolume+aa+ae+bb+slash+aa+underscore+bb+underscore+cc+underscore+dd+aep;

edittext_4.text = fullpath;
alert(folderpath);
alert(fullpath);

//Check to see if folder in folder path exists. if it does continue on. if it doesn't create a new folder.

//Check to see if the file name.aep exitsts AKA fullpath. If it does exist then version up. 001 becomes 002.  If not, just save as fullpath.

}
}
}
}

Я знаю, что решение, вероятно, очень простое, но я все еще очень новичок во всем этом, как в Javascript, так и в Extendscript, поэтому иногда проще всего упустить самые простые вещи. Буду признателен за любую оказанную помощь.


person Amaylayinsues    schedule 19.05.2015    source источник


Ответы (1)


Это может быть так же просто, как

if (!Folder(folderpath).exists)
  Folder(folderpath).create();

а также

while (File(fullpath).exists)
{
   dd = "000"+String(Number(dd)+1);
   dd = dd.substring(dd.length-3);
   fullpath = macVolume+aa+ae+bb+slash+aa+underscore+bb+underscore+cc+underscore+dd+aep;
}

folderpath кажется, не используется в вашем текущем коде; Я предполагаю, что это также будет помещено в fullpath в вашем окончательном коде.

Как бы то ни было, 3-значный формат для dd может привести к бесконечному циклу, если Number(dd) равно 999 и существуют все версии. Вы можете принять это во внимание сейчас или пережить последствия через какое-то время ;)

person Jongware    schedule 19.05.2015
comment
if (!Folder(folderpath).exists) Folder(folderpath).create(); часть работала отлично!!!!! Пока часть не так много. Это не позволяет мне перезаписать файл 001, и я все еще могу вручную обновить версию. Но он не обновляет версию, если уже обнаруживает версию 001. - person Amaylayinsues; 20.05.2015
comment
@Amaylayinsues: тогда требуется некоторая отладка. Материал File.exists должен работать, чтобы он мог быть в построении вашего полного пути. - person Jongware; 20.05.2015
comment
это позволяет мне сэкономить, любые очевидные ошибки, которые я делаю? Спасибо - person Amaylayinsues; 20.05.2015
comment
Ваш код может увеличить dd только один раз. Я использовал цикл while, поэтому число увеличивается, пока существует следующий файл. - person Jongware; 20.05.2015