在优胜美地上使用JavaScript for Automation列出文件夹中的所有文件

dwkns

我正在尝试将一些旧的Applescript移植到新的JavaScript语法上。

有些事情似乎很简单,所以:

tell application "System Events" to keystroke "t" using command down

变成:

System = Application('System Events');
System.keystroke("t", {using: "command down"})

但是,我终生无法解决如何在特定位置列出文件。在AppleScript中,要向我返回目录中文件的列表/usr,请执行以下操作:

tell application "System Events" to set fileList to name of items in folder "/usr"
-- > {"bin", "include", "lib", "libexec", "local", "sbin", "share", "standalone", "X11"}

但是,我无法终生解决如何使用Javascript做到这一点。

System = Application('System Events')
myPath = Path("/usr")

fileList = System.items(myPath) 
-- > message not understood

fileList = System.folder(myPath)
-- > message not understood

fileList = System.diskItems(myPath)
-- > []

fileList = System.diskItems({at:myPath)
-- > []

我也尝试了很多其他组合,但是没有运气。有任何想法吗?

就像前面的Leopard的Scripting Bridge一样,JXA故意破坏了在AppleScript中可以完美工作的所有东西。这是原始AppleScript命令到JXA语法的转换:

//tell application "System Events" to name of items in folder "/usr"
Application('System Events').folders.byName('/usr').items.name()

AS版本可以完美运行,但是等效的JXA却完全没有意义 Error -1700: Can't convert types.

如果您编写diskItems而不是itemsJXA似乎可以工作

Application('System Events').folders.byName('/usr').diskItems.name()
// --> ["bin", "lib", "libexec", "local", "sbin", "share", "standalone", "X11", "X11R6"]

这表明JXA沉迷于相同的内部“聪明”,导致SB在如此多的应用程序上崩溃。(请注意,我在较早的测试中发现了许多此类设计缺陷,但是一旦明确了AS开发人员只关心将自己的个人思想和偏见强加于其他所有人,削弱了功能并破坏了兼容性之后,就放弃了报告。)

为了进行比较,这是几个月前我迅速整理好以供JXA开发人员参考JavaScriptOSA(JOSA)原型(它们很快就忽略了,natch):

app('System Events').folders.named('/usr').items.name()
// -> ["bin", "lib", "libexec", "local", "sbin", "share", "standalone", "X11", "X11R6"]

(尽管尚未完全完成或测试,但JOSA的工作情况仍然比JXA好,文档记载得更好,甚至还包括用于将AS命令转换为JS语法的自动翻译工具。不幸的是,由于Apple已弃用或弃用了AEM,CM ,PM和OSA Carbon API,我不推荐将其用于生产;它纯粹是出于比较目的。)

相似地:

set myPath to POSIX file "/usr"
tell application "System Events" to name of every disk item of folder named myPath
--> {"bin", "lib", "libexec", "local", "sbin", "share", "standalone", "X11", "X11R6"}

myPath = Path('/usr')
Application('System Events').folders.byName(myPath).diskItems.name()
// Error -1728: Can't get object.

var myPath = Path('/usr')
app('System Events').folders.named(myPath).diskItems.name()
// --> ["bin", "lib", "libexec", "local", "sbin", "share", "standalone", "X11", "X11R6"]

您可以通过将Path对象转换为字符串并使用以下方法来解决这种特殊情况:

myPath = Path('/usr')
Application('System Events').folders.byName(myPath.toString()).diskItems.name()

尽管该解决方法在其他情况下不一定会有所帮助;例如,它在Finder中失败,因为Finder无法理解POSIX样式的路径字符串,并且无法从JXA Path对象获取HFS样式的路径字符串(Finder可以理解):

set myPath to POSIX file "/usr"
tell application "Finder" to name of every item of item myPath
--> {"X11", "X11R6", "bin", "lib", "libexec", "local", "sbin", "share", "standalone"}

myPath = Path('/usr')
Application('Finder').folders.byName(myPath.toString()).items.name()
// Error -1728: Can't get object.

顺其自然。(例如,尝试测试JXA对范围,过滤器,相对和插入参考形式的支持;它特别烂。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用angular js列出文件夹中的所有文件名

来自分类Dev

使用 Outlook MAPI 列出文件夹中的所有电子邮件

来自分类Dev

如何使用scandir列出文件夹和子文件夹中的所有文件,并将其显示为select中的选项?

来自分类Dev

在自己的应用程序中在优胜美地上使用图像编辑扩展

来自分类Dev

bash列出文件夹中的所有子目录,将它们写入数组以在菜单中使用

来自分类Dev

使用python列出文件夹中具有特定结尾的文件作为变量

来自分类Dev

如何使用批处理文件以编号顺序列出文件夹中特定扩展名的所有文件

来自分类Dev

LSOpenURLsWithRole()在tmux中在优胜美地上失败,错误-1080

来自分类Dev

使用JGit TreeWalk列出文件和文件夹

来自分类Dev

使用LS命令逐页列出文件夹的文件

来自分类Dev

使用Swift在iTunes共享文件夹中列出文件

来自分类Dev

Android-如何使用内容提供商列出文件夹中的文件

来自分类Dev

如何使用bash脚本列出文件夹中的文件

来自分类Dev

使用 bash 列出所有文件夹和子文件夹

来自分类Dev

无法使用JavaMail访问/列出Gmail中的所有文件夹/标签

来自分类Dev

使用fd列出主文件夹中的所有目录

来自分类Dev

如何使用bash命令列出文件夹?

来自分类Dev

如何在Linux shell中使用`ls`列出文件,因为它们在相应的文件夹中列出

来自分类Dev

使用RecursiveDirectoryIterator列出文件夹/子文件夹

来自分类Dev

OSX /优胜美地上的MacVim:根本没有可见的编辑器窗口

来自分类Dev

Apache2无法在优胜美地上正常启动,与现有进程竞争

来自分类Dev

优胜美地上的Python

来自分类Dev

遍历文件夹并使用文件夹名称顺序重命名每个文件夹中的所有文件

来自分类Dev

使用Shell修改文件夹及其所有子文件夹中的文件

来自分类Dev

使用vuejs将文件夹的所有文件列出到容器的右侧

来自分类Dev

列出文件夹中的所有文件ID(无子文件夹)

来自分类Dev

如何使用Boost和C ++递归和分别列出文件和文件夹

来自分类Dev

无法使用SharePoint Client API列出文件/文件夹

来自分类Dev

我想使用azure storage api列出容器内的所有子文件夹

Related 相关文章

  1. 1

    如何使用angular js列出文件夹中的所有文件名

  2. 2

    使用 Outlook MAPI 列出文件夹中的所有电子邮件

  3. 3

    如何使用scandir列出文件夹和子文件夹中的所有文件,并将其显示为select中的选项?

  4. 4

    在自己的应用程序中在优胜美地上使用图像编辑扩展

  5. 5

    bash列出文件夹中的所有子目录,将它们写入数组以在菜单中使用

  6. 6

    使用python列出文件夹中具有特定结尾的文件作为变量

  7. 7

    如何使用批处理文件以编号顺序列出文件夹中特定扩展名的所有文件

  8. 8

    LSOpenURLsWithRole()在tmux中在优胜美地上失败,错误-1080

  9. 9

    使用JGit TreeWalk列出文件和文件夹

  10. 10

    使用LS命令逐页列出文件夹的文件

  11. 11

    使用Swift在iTunes共享文件夹中列出文件

  12. 12

    Android-如何使用内容提供商列出文件夹中的文件

  13. 13

    如何使用bash脚本列出文件夹中的文件

  14. 14

    使用 bash 列出所有文件夹和子文件夹

  15. 15

    无法使用JavaMail访问/列出Gmail中的所有文件夹/标签

  16. 16

    使用fd列出主文件夹中的所有目录

  17. 17

    如何使用bash命令列出文件夹?

  18. 18

    如何在Linux shell中使用`ls`列出文件,因为它们在相应的文件夹中列出

  19. 19

    使用RecursiveDirectoryIterator列出文件夹/子文件夹

  20. 20

    OSX /优胜美地上的MacVim:根本没有可见的编辑器窗口

  21. 21

    Apache2无法在优胜美地上正常启动,与现有进程竞争

  22. 22

    优胜美地上的Python

  23. 23

    遍历文件夹并使用文件夹名称顺序重命名每个文件夹中的所有文件

  24. 24

    使用Shell修改文件夹及其所有子文件夹中的文件

  25. 25

    使用vuejs将文件夹的所有文件列出到容器的右侧

  26. 26

    列出文件夹中的所有文件ID(无子文件夹)

  27. 27

    如何使用Boost和C ++递归和分别列出文件和文件夹

  28. 28

    无法使用SharePoint Client API列出文件/文件夹

  29. 29

    我想使用azure storage api列出容器内的所有子文件夹

热门标签

归档