AppleScript:我将Finder选项复制到剪贴板。我可以获得复制项目的完整路径吗?

时间:2010-08-14 20:51:12

标签: macos applescript clipboard appscript rb-appscript

我在Finder中选择了一个或多个文件和/或文件夹。我手动将它们复制到剪贴板/粘贴板(⌘C)。

为了简单起见,假设我只复制了一个普通文件。但是,理想的解决方案是处理许多文件以及带有文件夹,别名的混合选择。

现在这个文件在剪贴板上,我希望得到它的完整路径(最好是POSIX路径)。


节省您的时间:

  • 我正在寻找AppleScript(或rb-appscript)解决方案。
  • 我不想直接从选择中获取路径。它必须来自剪贴板上的项目。
  • 真的,我知道我可以通过首先将路径复制到选择中然后用它完成任何我想做的事来绕过它。

到目前为止我所知道的(在rb-appscript中注明):

  • OSAX.osax.the_clipboard有一串没有路径的文件名。
  • Appscript.app('Finder').clipboard.get显然没有实现(字典说“不可用”;调用它会返回:missing_value

5 个答案:

答案 0 :(得分:2)

以下AppleScript似乎可以解决这个问题:

POSIX path of (the clipboard as «class furl»)

如果剪贴板上有多个项目,它将仅返回第一个项目的POSIX路径。

另请参阅AppleScript command reference命令the clipboard


rb-appscript版本:

OSAX.osax.the_clipboard(:result_type => :file_url).path

答案 1 :(得分:2)

这是一个可以从剪贴板获取所有posix路径的AppleScript,而不仅仅是第一个...

set theFiles to paragraphs of (get the clipboard)

set posixPaths to {}
repeat with aFile in theFiles
    try
        tell application "Finder" to set thePath to item aFile as text
        set end of posixPaths to (POSIX path of thePath)
    end try
end repeat
return posixPaths

答案 2 :(得分:0)

以为我会分享我在sakra回答后写的rb-appscript代码:

#!/usr/bin/arch -i386 /usr/bin/ruby
require "rubygems"
require "osax"
include OSAX


def path_from_clipboard
  osax.clipboard_info.flatten.include? :file_url or raise "clipboard does not contain path data" 
  osax.the_clipboard.count("\r") == 0            or raise "clipboard contains more than one path"
  osax.the_clipboard(:result_type => :file_url).path
end

puts path_from_clipboard

答案 3 :(得分:0)

Finder就是这样,而AppleScript就是它的样子,它太过于无法解决。那么,到底是什么,我跳进了可可。

这些脚本中的任何一个都将在新行上返回绝对路径列表。

的MacRuby:

#!/usr/bin/env macruby
# encoding: UTF-8
framework 'Cocoa'
puts NSPasteboard.generalPasteboard.pasteboardItems
  .map { |pbi| pbi.stringForType('public.file-url') }.compact
  .map { |url| NSURL.URLWithString(url).path }

女:

#!/usr/bin/env nush
(puts ((((((NSPasteboard generalPasteboard) pasteboardItems)
  map:    (do (pbi) (pbi stringForType: "public.file-url")))
  select: (do (url) (url)))
  map:    (do (url) ((NSURL URLWithString: url) path))) componentsJoinedByString: "\n"))

答案 4 :(得分:0)

我一直在寻找一种解决方案,该解决方案可以复制Finder中所选文件的路径。这是我想出的:

set ASTID to AppleScript's text item delimiters --——>>
set AppleScript's text item delimiters to return

tell application "Finder" to set sel to the selection as text

set listPaths to {}
repeat with pth in paragraphs of sel
    set end of listPaths to POSIX path of pth
end repeat

set listPathsClipboard to listPaths as text
set AppleScript's text item delimiters to ASTID --——<<

set the clipboard to listPathsClipboard