1

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

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

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


为了节省您的时间:

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

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

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

5 回答 5

3

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

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

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

另请参阅该命令的AppleScript 命令参考the clipboard


rb-appscript 版本:

OSAX.osax.the_clipboard(:result_type => :file_url).path
于 2010-08-14T21:04:20.730 回答
2

这是一个applescript,它将从剪贴板中获取所有posix路径,而不仅仅是第一个......

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
于 2010-08-15T07:14:14.347 回答
1

Finder 就是它,AppleScript 就是它,它实在是太失败了。所以,到底是什么,我跳进了可可。

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

麦克鲁比:

#!/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"))
于 2010-08-23T07:44:34.967 回答
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
于 2010-08-14T22:18:39.640 回答
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 --——&lt;<

set the clipboard to listPathsClipboard
于 2018-10-19T14:43:41.233 回答