В проводнике Windows (Win7) я могу перетащить файл в пакетный файл (.bat), и пакетный файл будет выполнен с путем к перетащенному файлу в качестве первого аргумента командной строки. Как сделать то же самое со скриптом Ruby?
Я не имею в виду использование аргумента внутри скрипта. Скрипт Ruby не выделяется как цель перетаскивания, когда файл находится над значком, и его перетаскивание просто меняет порядок значков. Я хочу, чтобы он вел себя так же, как пакетные файлы (или любой другой исполняемый файл).
решение1
Типы файлов, на которые можно что-то сбрасывать, имеют ключи в реестре, сообщающие Windows, как их запускать. Если расширение вашего скрипта настроено так, что Ruby запускает скрипт по умолчанию, то вы на полпути.
(Обязательное предупреждение: это взлом. Вмешательство в реестр может серьезно испортить ваш компьютер. Если вы хоть немного заботитесь о своих данных и не доверяете мне (а вам не следует доверять), сделайте резервную копию, прежде чем продолжить.)
- Запустите редактор реестра. Он называется «regedit». (Если вы используете Vista или Windows 7, вам может потребоваться щелкнуть правой кнопкой мыши и «запустить от имени администратора».)
- Откройте HKEY_CLASSES_ROOT\batfile\ShellEx\DropHandler. Там будет GUID в качестве значения по умолчанию. Это значение используется пакетными файлами, EXE-файлами и некоторыми другими. Поскольку я не знаю ни об одном COM-объекте, который использует Ruby, мы собираемся использовать его. Он помечен в реестре как ".exe drop target". Похоже, что он "запускает" скрипт, передавая имена файлов в качестве аргументов.
- Дважды щелкните "(По умолчанию)", чтобы открыть значение. Скопируйте guid, а затем отмените в поле редактирования.
- Теперь найдите "RubyFile" и "RubyWFile" внутри HKEY_CLASSES_ROOT. Первый из них для консольных скриптов, а последний, похоже, для GUI-скриптов. Если вы используете другой интерпретатор Ruby, чем я, или если вы сами настроили обработчик по умолчанию, вы можете найти ключи "rbfile" и/или "rbwfile".
- Щелкните правой кнопкой мыши по одному из ключей и создайте новый ключ с именем "ShellEx", если он еще не существует. Затем создайте еще один ключ внутри этого нового ключа с именем "DropHandler".
- Измените значение по умолчанию в этом ключе DropHandler и вставьте GUID, скопированный на шаге 3. Нажмите «ОК».
- Повторите шаги 5 и 6 с другим ключом.
После этого вы сможете перетаскивать файлы в свой скрипт.
решение2
На основе@cHau'sотвечать, вот 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" непосредственно на скомпилированный исполняемый файл (*.exe) в проводнике Windows 7. Вот начало моего 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 в качестве приложения по умолчанию для этих скриптов, используя расширение файла.
Видетьздеськак это сделать.