在 Windows 资源管理器 (Win7) 中,我可以将文件拖放到批处理 (.bat) 文件中,然后使用拖放文件的路径作为第一个命令行参数来执行批处理文件。如何使用 Ruby 脚本执行相同的操作?
我的意思不是在脚本中使用参数。当文件位于图标上方时,Ruby 脚本不会突出显示为放置目标,而将其放置只会重新排列图标。我希望它的行为与批处理文件(或任何其他可执行文件)相同。
答案1
可以放置内容的文件类型在注册表中具有键,用于告诉 Windows 如何运行它们。如果您已设置脚本的扩展,以便 Ruby 默认运行该脚本,那么您就成功了一半。
(必须警告:这是黑客行为。弄乱你的注册表可能会严重损坏你的计算机。如果你非常关心你的数据并且不相信我(你也不应该相信我),请在继续之前进行备份。)
- 启动注册表编辑器。它的名字是“regedit”。(如果您运行的是 Vista 或 Windows 7,则可能需要右键单击它并选择“以管理员身份运行”。)
- 打开 HKEY_CLASSES_ROOT\batfile\ShellEx\DropHandler。将有一个 GUID 作为默认值。它恰好是批处理文件、EXE 文件和其他一些文件使用的值。由于我不知道 Ruby 使用任何 COM 对象,我们将滥用这个。它在注册表中被标记为“.exe 放置目标”。它似乎所做的是“启动”脚本,将文件的名称作为参数传递。
- 双击“(默认)”打开值。复制 guid,然后取消编辑框。
- 现在在 HKEY_CLASSES_ROOT 中找到“RubyFile”和“RubyWFile”。第一个用于控制台脚本,后者似乎用于 GUI 脚本。如果您使用的 Ruby 解释器与我不同,或者您自己设置了默认处理程序,您可能会找到键“rbfile”和/或“rbwfile”。
- 右键单击其中一个键,如果尚不存在,则在其中创建一个名为“ShellEx”的新键。然后在该新键内创建另一个名为“DropHandler”的键。
- 编辑 DropHandler 键中的默认值,并粘贴您在步骤 3 中复制的 GUID。单击“确定”。
- 用另一个键重复步骤 5 和 6。
完成后,您应该能够将文件拖到脚本上。
答案2
基于@cHau的回答,这是一个 reg 文件,它将设置对 Ruby 脚本的支持(未经全面测试,可能会损坏您的计算机)(要旨):
Windows 注册表编辑器版本 5.00 [HKEY_CLASSES_ROOT\rbfile\ShellEx\DropHandler] @="{86C86720-42A0-1069-A2E8-08002B30309D}" [HKEY_CLASSES_ROOT\rbwfile\ShellEx\DropHandler] @="{86C86720-42A0-1069-A2E8-08002B30309D}" [HKEY_CLASSES_ROOT\RubyFile\ShellEx\DropHandler] @="{86C86720-42A0-1069-A2E8-08002B30309D}" [HKEY_CLASSES_ROOT\RubyWFile\ShellEx\DropHandler] @="{86C86720-42A0-1069-A2E8-08002B30309D}"
答案3
我通过以下方式编译了我的 Ruby 程序OCRA 宝石,如果我将“filename.txt”直接拖到 Windows 7 资源管理器中已编译的可执行文件 (*.exe) 上,它就会起作用。这是我的 Ruby 的开头:
reports='filename.txt' #Opening the file
f = File.open('output.txt', 'w')
File.readlines(reports).each do |line|
#processing, such as f.puts
end
如果你想支持拖放未知文件名,你可以尝试
filename = Dir.entries('.').detect {|z| z.match / whatever pattern or extension /}
File.open(filename.to_s, 'w')
无需修改 Windows 注册表或默认打开程序设置。
答案4
尝试使用该文件的扩展名将 Ruby 设置为此脚本的默认应用程序。
看这里怎么做。