Javascript:将'choose folder'更改为特定位置

Javascript: Change 'choose folder' to specific location

我找到了一个 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;
}

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

为此,您需要将所需文件夹的路径指定为字符串。

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

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

已更改为:

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

现在假定目标文件夹名为 targetFolder 并且位于您的 Desktop 文件夹中。您需要根据需要更改 '~/Desktop/targetFolder' 部分以指向您实际需要的文件夹。它还假定您在 macOS 上使用 运行 作为桌面文件夹的快捷方式(即 ~/ 部分)将无法在 Windows.

上识别

还有哪些方法可以指定路径?

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

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

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

  2. 可以找到有关设置文件路径的更多信息here


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

  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 函数。但是,如果您在代码的其他地方有它,您可以将其删除。


更新的代码示例:

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;
}