javascript - ExtendScript 系统文件夹检查

标签 javascript directory exists 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。

如果有人能解释如何在文件夹列表排序时使进度条工作,那就 super 加分了。我有大约 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)仍然很陌生,所以有时最简单的事情最容易被忽视。非常感谢任何帮助。

最佳答案

它可能很简单

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 中。

事实上,如果 Number(dd)999 并且 dd 的 3 位格式可能会导致无限循环所有版本都存在。您可能需要现在考虑这一点,或者稍后承受后果;)

关于javascript - ExtendScript 系统文件夹检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336461/

相关文章:

java - 使用java驱动程序在Mongodb中存在多个文档的查询

javascript - D3 根据 header 名称追加

javascript - Angular 12 抛出此错误 FATAL ERROR : Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

java - 如何设置java程序的默认保存位置?

windows - 以编程方式检测文件夹是否为云本地文件夹

javascript 检查对象是否存在

JavaScript:检查窗口是否存在&&未最小化

javascript - 替换字符串并计算字符串中字母的出现次数

javascript - vuejs 2.0 组件无法使用模块 vuex 访问操作方法

javascript - 如何在php中的header中设置目录