9

我尝试在 AppleScript 中处理命令行参数。如果我使用osascript TestArgs.scpt a.txt b.txt. 但是,如果我将脚本保存为 .app 并从命令行运行它,它不会显示任何参数:open -a TestArgs --args a.txt b.txt不起作用。我还尝试了脚本的几种变体,但均未成功。

on run argv
    set argc to 0
    try
        set argc to (count of argv)
    end try
    tell application "Finder" to display dialog ("Argument Count: " & argc as string)
end run

似乎问题出在 OSX 10.8 上,因为相同的脚本在 10.7 上按预期工作

我的错误在哪里?

谢谢并恭祝安康。

4

3 回答 3

2

有一种方法可以使用 JXA(用于自动化的 JavaScript),这可能是一个可以接受的解决方案。它使用了 Objective-C 桥接器,因此也可以使用 AppleScript。这主要取自 JXA Cookbook

此问题中与 AppleScript 等效的 JXA 将使用:

function run(argv) {
  …
}

但它也存在编译到应用程序时无法工作的相同问题。您可以通过开始代码来解决这个问题

ObjC.import('Foundation')
const args = $.NSProcessInfo.processInfo.arguments
const argv = []
const argc = args.count
for (let i = 0; i < argc; i++) { argv.push(ObjC.unwrap(args.objectAtIndex(i))) }
delete args

用户给定的参数将从 开始argv[1]argv[0]applet 本身也是如此。

于 2017-06-01T17:39:10.397 回答
1

您为什么不将 osascript 与应用程序一起使用?这样可行。你基本上有两种方法来传递参数。这些适用于 scpt 或应用程序...

1)从命令行:osascript /path/to/script arg1 arg2

2) 从另一个脚本:使用参数 {arg1, agr2} 运行脚本文件 path:to:script。

于 2013-01-20T11:21:16.880 回答
1

我自己也一直在寻找解决方案。由于还没有批准的解决方案,我想指出red_menace发布的解决方案。在那里,您可以找到一个 AppleScript 代码,该代码完全回答了原始发布的问题,即如何使用命令行参数运行 Applescript 应用程序。

值得称赞的是,AppleScript 代码让人想起user137369发布的JavaScript 应用程序

于 2019-10-15T09:05:55.533 回答