【问题标题】:Javascript: Change 'choose folder' to specific locationJavascript:将“选择文件夹”更改为特定位置
【发布时间】:2018-03-30 00:11:38
【问题描述】:

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

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

【问题讨论】:

  • 我知道我可以使用输入文件函数,但不知道它会去哪里或替换什么。
  • 不是跨浏览器、跨平台的方式,没有。
  • 好吧...只是不明白我猜。似乎这将是一件简单的事情。与其让用户给它使用的目录,你会认为我可以事先告诉它要使用的目录。这将是一个仅 MAC 的应用程序。而不是使用 Folder.selectDialog 我可以只提供我想要使用的目录。
  • 等一下,Folder.selectDialog... 这是一个网络应用程序还是其他什么?
  • 它只是一个小脚本应用程序,用于在 MAC 上自动执行 Photoshop 工作流程中的一些事情。不是网络应用程序。脚本抓取文件夹中的文件并将它们作为 Photoshop 文档中的图层打开。只想为其提供图像所在文件夹的目录,而不是抛出用户需要与之交互的对话框。想让它更“放手”。

标签: javascript directory applescript photoshop finder


【解决方案1】:

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

如果您查看下面的更新的代码示例,您会注意到原始代码的第 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;
    

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

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

【讨论】:

  • 这正是我所需要的!!除了将“文件夹”放在路径前面之外,我已经尝试了每个版本。谢谢!!我如何“关闭”这个问题?感谢您的所有帮助...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 2015-09-13
  • 2018-05-31
  • 2022-01-02
  • 2014-10-03
  • 2016-01-25
  • 1970-01-01
相关资源
最近更新 更多