Javascript:将“选择文件夹”更改为特定位置

时间:2018-03-30 00:11:38

标签: javascript directory applescript photoshop finder

我找到了一个javascript,但它首先让用户选择一个文件夹来获取文件。我想创建一个监视文件夹,所以我想告诉javascript文件夹从中获取文件,而不是让用户选择。我不能为我的生活弄清楚如何做到这一点。我知道applescript但是无法掌握javascript。谢谢!

以下是我认为需要改变的领域:

function main() {
   // user settings
   var prefs = new Object();
   prefs.sourceFolder         = '/Volumes/SERVER_RAID/•Current/MPC';  // default browse location (default: '~')
   prefs.removeFileExtensions = true; // remove filename extensions for imported layers (default: true)
   prefs.savePrompt           = true; // display save prompt after import is complete (default: false)
   prefs.closeAfterSave       = true; // close import document after saving (default: false)

   // prompt for source folder
   var sourceFolder = Folder.selectDialog('Where are the Front and Back files?', Folder(prefs.sourceFolder));

   // ensure the source folder is valid
   if (!sourceFolder) {
      return;
   }
   else if (!sourceFolder.exists) {
      alert('Source folder not found.', 'Script Stopped', true);
      return;
   }

   // add source folder to user settings
   prefs.sourceFolder = sourceFolder;

   // get a list of files
   var fileArray = getFiles(prefs.sourceFolder);

   // if files were found, proceed with import
   if (fileArray.length) {
      importFolderAsLayers(fileArray, prefs);
   }
   // otherwise, diplay message
   else {
      alert("The selected folder doesn't contain any recognized images.", 'No Files Found', false);
   }
}

///////////////////////////////////////////////////////////////////////////////
// getFiles - get all files within the specified source
///////////////////////////////////////////////////////////////////////////////
function getFiles(sourceFolder) {
   // declare local variables
   var fileArray = new Array();
   var extRE = /\.(?:png)$/i;

   // get all files in source folder
   var docs = sourceFolder.getFiles();
   var len = docs.length;
   for (var i = 0; i < len; i++) {
      var doc = docs[i];

      // only match files (not folders)
      if (doc instanceof File) {
         // store all recognized files into an array
         var docName = doc.name;
         if (docName.match(extRE)) {
            fileArray.push(doc);
         }
      }
   }

   // return file array
   return fileArray;
}

///////////////////////////////////////////////////////////////////////////////

1 个答案:

答案 0 :(得分:0)

要实现此目的,您需要将所需文件夹的路径指定为String。

如果您查看下面的更新的代码示例,您会注意到原始代码的第4行:

prefs.sourceFolder = '/Volumes/SERVER_RAID/•Current/MPC';

已更改为:

prefs.sourceFolder = Folder('~/Desktop/targetFolder');

现在假设目标文件夹名为targetFolder,它位于Desktop文件夹中。您需要根据需要更改'~/Desktop/targetFolder'部分以指向您实际需要的文件夹。它还假设您在macOS上运行此操作,因为在Windows上无法识别Desktop文件夹的快捷方式(即~/部分)。

我可以指定路径的其他方法是什么?

  1. 您可以使用绝对路径指定路径名,例如:

    prefs.sourceFolder = Folder('/Users/JohnDoe/Desktop/targetFolder');
    

    注意:此示例实际上指向与第一个示例相同的文件夹。假设用户当然叫做John Doe!

  2. 有关设置文件路径的详细信息,请参见here

  3. 您的代码示例进行了哪些其他更改:

    1. 示例代码中的第9到22行:

      // prompt for source folder
      var sourceFolder = Folder.selectDialog('Where are the Front and Back files?', Folder(prefs.sourceFolder));
      
      // ensure the source folder is valid
      if (!sourceFolder) {
         return;
      }
      else if (!sourceFolder.exists) {
         alert('Source folder not found.', 'Script Stopped', true);
         return;
      }
      
      // add source folder to user settings
      prefs.sourceFolder = sourceFolder;
      

      现在是多余的。相反,它们已被替换为以下代码段,如果找不到您指定的文件夹,它将提醒您:

      // ensure the source folder exists.
      if (!prefs.sourceFolder.exists) {
        alert('Source folder not found.\n' + prefs.sourceFolder, 'Script Stopped', true);
        return;
      }
      
    2. 我在下面的第30行添加了main()来调用main函数。但是,如果您在代码中的其他地方有,则可以将其删除。

    3. 更新了代码示例:

      function main() {   
        // User settings
        var prefs = new Object();
        prefs.sourceFolder         = Folder('~/Desktop/targetFolder');
        prefs.removeFileExtensions = true;
        prefs.savePrompt           = true;
        prefs.closeAfterSave       = true;
      
        // ensure the source folder exists.
        if (!prefs.sourceFolder.exists) {
          alert('Source folder not found.\n' + prefs.sourceFolder, 'Script Stopped', true);
          return;
        }
      
        // Get a list of files
        var fileArray = getFiles(prefs.sourceFolder);
      
        // If files were found, proceed with your tasks.
        if (fileArray.length) {
          alert('I found image(s) in the specified folder\n' +
              'Now you need to write code to perform out a task :)');
         // <-- Continiue your code here
        }
        // otherwise, diplay message
        else {
          alert('The selected folder doesn\'t contain any recognized images.', 'No Files Found', false);
        }
      }
      
      main(); // <-- Invokes the `main` function
      
      /**
       * getFiles - get all files within the specified source
       * @param {String} sourceFolder - the path to the source folder.
       */
      function getFiles(sourceFolder) {
        // declare local variables
        var fileArray = new Array();
        var extRE = /\.(?:png)$/i;
      
        // get all files in source folder
        var docs = sourceFolder.getFiles();
        var len = docs.length;
      
        for (var i = 0; i < len; i++) {
          var doc = docs[i];
      
          // only match files (not folders)
          if (doc instanceof File) {
            // store all recognized files into an array
            var docName = doc.name;
            if (docName.match(extRE)) {
              fileArray.push(doc);
            }
          }
        }
      
        // return file array
        return fileArray;
      }