获取脚本上删除的文件的文件名

时间:2010-05-26 21:08:32

标签: macos path applescript posix symlink

我制作了这个Applescript脚本来创建符号链接 来自POSIX path of的公寓,如何获取已删除文件的文件名,而不是路径?

on open filelist
    repeat with i in filelist
        do shell script "ln -s " & POSIX path of i & " /Users/me/Desktop/symlink"
    end repeat
end open

PS:我知道这需要删除许多文件并尝试创建许多具有相同名称的链接,这会产生错误。实际上我从一个网站复制了这个例子,因为我几乎不知道关于Applescript的任何事情,我不知道如何为一个文件做这个,对此的帮助也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

例如,您可以使用Finder而不是shell脚本来获取保存为应用程序的脚本上删除的单个文件的名称。如果您不需要显示对话框,则可以将其删除,但是您可以将文件名作为变量来使用:

on open the_files
    repeat with i from 1 to the count of the_files
        tell application "Finder"
            set myFileName to name of (item i of the_files)
        end tell
        display dialog "The file's name is " & myFileName
    end repeat
end open

答案 1 :(得分:1)

我不确定你究竟想要做什么,但我有一个猜测。您是想要将每个文件都放在脚本上并创建一个符号链接到桌面上的每个文件?如果我放弃~/look/at/me~/an/example,您将拥有~/Desktop/me~/Desktop/example?如果这就是你想要的,那么你很幸运:ln -s <file1> <file2> ... <directory>正是如此。 (编辑:虽然您必须注意两个参数的情况。)因此,您的代码可能如下所示:

-- EDITED: Added the conditional setting of `dest` to prevent errors in the
-- two-arguments-to-ln case (see my comment).

on quoted(f)
    return quoted form of POSIX path of f
end quoted

on open filelist
    if filelist is {} then return
    set dest to missing value
    if (count of filelist) is 1 then
        tell application "System Events" to set n to the name of item 1 of filelist
        set dest to (path to desktop as string) & n
    else
        set dest to path to desktop
    end if
    set cmd to "ln -s"
    repeat with f in filelist & dest
        set cmd to cmd & " " & quoted(f)
    end repeat
    do shell script cmd
end open

注意使用quoted form of;它将其参数包装在单引号中,因此在shell中执行将不会做任何有趣的事情。

如果您想以其他原因获取文件名,则无需致电Finder;您可以改为使用系统事件:

tell application "System Events" to get name of myAlias

将返回myAlias中存储的文件的名称。


编辑:如果您想对单个文件执行某些操作,则非常简单。而不是使用repeat迭代每个文件,只需对item 1 of theList访问的第一个文件执行相同的操作。所以在这种情况下,您可能需要这样的东西:

-- EDITED: Fixed the "linking a directory" case (see my comment).

on quoted(f)
    return quoted form of POSIX path of f
end quoted

on open filelist
    if filelist is {} then return
    set f to item 1 of filelist
    tell application "System Events" to set n to the name of f
    do shell script "ln -s " & ¬
        quoted(f) & " " & quoted((path to desktop as string) & n)
end open

它几乎相同,但我们抓住filelist中的第一项并忽略其余项。此外,最后,我们显示一个包含符号链接名称的对话框,以便用户知道发生了什么。