使用Applescript从文件夹中打开随机脚本文件

时间:2014-03-07 01:48:19

标签: random scripting applescript

Set theFolder to (Macintosh HD:Users:jr:Desktop:Dsource)

Set rnd to (random number from 1 to 3)

Set myScript to load script file (rnd) of theFolder

Run script myScript

这是我试图用来从文件夹中打开随机脚本文件并执行它们的脚本。我已经编写了3或4种不同类型的脚本来尝试这样做,但似乎没有任何工作。有人可以指出错误或告诉我如何做到这一点。感谢

2 个答案:

答案 0 :(得分:0)

==> 1.在桌面上创建一个名为“Dsource”的文件夹

==> 2.创建一个脚本并将其命名为“1”。该脚本应包含display dialog "Script 1",因此当您启动它时,它会显示脚本编号。保存/将其放入Dsource文件夹并重复(但更改显示对话框中的数字),直到您有3个脚本。注意:文件扩展名通常隐藏在Finder中,但此类脚本的扩展名为“.scpt”。

如果给出上述内容,则应该有效:

run script (load script file (((path to desktop) as text) & "Dsource:" & (((random number from 1 to 3) as text) & ".scpt")))

此外: 更长的版本,它做同样的事情,但一步一步地做:

try

    set pathToMyFolderOnDesktop to (path to desktop as text) & "Dsource:" as alias

    set rnd to (random number from 1 to 3)

    set rndFileName to (rnd as text) & ".scpt"

    set FullPath to pathToMyFolderOnDesktop & rndFileName as text

    set myScript to load script (FullPath as alias)
    run script myScript


on error the error_message number the error_number

    display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1
    return

end try

如果 - 例如 - 文件夹不存在(-43)。

,这也会显示错误

答案 1 :(得分:0)

字符串不是Applescript

中的文件夹

您正尝试使用字符串访问文件。 "Macintosh HD:Users:jr:Desktop:Dsource"不是文件夹,除非您将其设为一个文件夹。那么,这一行

Set myScript to load script file (rnd) of theFolder

从字符串中获取rnd字符(如果M为1,则为rnd),并尝试对其进行load script

要将字符串设置为Applescript识别为文件夹的字符串,您可以在前面添加alias,以便alias "Macintosh HD:Users:jr:Desktop:Dsource"

您需要定位文件

假设您可以使用以下行获取文件夹的所有文件,您的逻辑仍然有点偏差。

Set myScript to load script file (rnd) of theFolder

此行将定位到名为 rnd的文件。不是文件夹的rnd文件。换句话说,此行评估为

Set myScript to load script file "Macintosh HD:Users:jr:Desktop:Dsource:1"

简单的方法

Applescript提供some命令,允许您从列表中选择随机项

some item of {1, 2, 3}
--> 2
some item of {1, 2, 3}
--> 1

因此,请将现有脚本文件收集到列表中,然后从该列表中选择一个随机脚本文件。

tell application "System Events"
    set scriptFiles to files of alias "Macintosh HD:Users:jr:Desktop:Dsource:" whose kind is "Compiled OSA Script"
end tell

if (count scriptFiles) > 0
    set myScript to load script (some item of scriptFiles)
    run myScript
else
    display dialog "No script files were found."
end if