使用Ruby创建Windows快捷方式,在文本编辑器中打开

时间:2018-01-05 19:25:12

标签: ruby shortcut

我正在使用win32 gem创建文本文件的快捷方式链接。

大多数情况下,它有效,但我想添加一个部分,以便我可以点击链接并打开它指向的文件(例如,记事本)。

代码运行时没有任何明显的问题,但是当我点击链接时,没有任何反应。

require 'win32/shortcut'
include Win32

def new_shortcut(args = {})
  folder1 = args[:folder1]
  folder2 = args[:folder2]

  shortcut_name = args[:shortcut_name]
  shortcut_description = args[:shortcut_description]
  file_ext = args[:file_ext]

  Shortcut.new("#{folder1}/#{shortcut_name}.lnk") do |s|
    s.description       = shortcut_description
    s.path              = folder2
    s.show_cmd          = Shortcut::SHOWNORMAL
    s.working_directory = folder1

     if file_ext == ".rb"
       s.path = Dir::WINDOWS << "\\notepad.exe"
    end
  end
end

1 个答案:

答案 0 :(得分:0)

如果我们通过更改此行来修复path部分该怎么办:

s.path = Dir::WINDOWS << "\\notepad.exe"

要么

s.path = "%WINDIR%/notepad.exe"
#or 
s.path = %x(echo %WINDIR%).chomp << "/notepad.exe"

%WINDIR%是Windows目录的Windows环境变量,因此这些选项中的任何一个都可以为您工作,而无需额外的依赖项。

不要担心正向斜杠win32-shortcut宝石已经在处理那些宝石了。然后你需要指定要打开的实际文件,因为你要覆盖这些文件path所以让我们更进一步

if file_ext == ".rb"
  s.path = "%WINDIR%/notepad.exe"
  s.arguments = folder2
end

这将导致&#34;目标&#34;在链接中是&#34;%WINDIR%\ notepad.exe WHATEVER_FOLDER2_IS&#34;这是使用链接中的记事本打开文件的正确语法。

总而言之,我会将方法编写为(稍加清理)

def new_shortcut(args = {})
  folder1 = args[:folder1]
  folder2 = args[:folder2]

  shortcut_name = args[:shortcut_name]
  shortcut_description = args[:shortcut_description]
  # use `File` class to get the extension
  file_ext = File.extname(folder2)

  Shortcut.new("#{folder1}/#{shortcut_name}.lnk") do |s|
    s.description = shortcut_description

    s.show_cmd = Shortcut::SHOWNORMAL

    if file_ext == ".rb" 
      #set the working directory so no need to make it part of path
      s.working_directory = "%WINDIR%" 
      s.path = "notepad.exe"
      s.arguments = folder2 
    else
      s.path = folder2
    end
  end
end

显然,这可能会对缺少名称使用额外的处理,对于可能使用explorer.exe的目录,其他扩展的其他应用程序等等,但你明白了。