3

В проводнике Windows (Win7) я могу перетащить файл в пакетный файл (.bat), и пакетный файл выполняется с указанием пути к удаленному файлу в качестве первого аргумента командной строки. Как я могу сделать то же самое со скриптом на Ruby?

Я не имею в виду использование аргумента в сценарии. Скрипт Ruby не выделяется как цель удаления, когда файл находится над значком, а удаление его просто изменяет порядок значков. Я хочу, чтобы он вел себя так же, как командные файлы (или любой другой исполняемый файл).

4 ответа4

4

Типы файлов, которые могут содержать ненужные файлы, имеют ключи в реестре, чтобы указать Windows, как их запускать. Если у вас настроено расширение вашего скрипта так, что Ruby запускает скрипт по умолчанию, то вы на полпути.

(Обязательное предупреждение: это взлом. Возиться с вашим реестром может по-королевски испортить ваш компьютер. Если вы вообще заботитесь о своих данных и не доверяете мне (а также не должны доверять), сделайте резервную копию, прежде чем продолжить.)

  1. Запустите редактор реестра. Это называется "regedit". (Если вы работаете в Vista или Windows 7, вам может потребоваться щелкнуть правой кнопкой мыши и запустить "от имени администратора".)
  2. Откройте HKEY_CLASSES_ROOT\batfile\ShellEx\DropHandler. Там будет GUID в качестве значения по умолчанию. Это значение, используемое пакетными файлами, EXE-файлами и некоторыми другими. Поскольку я не знаю ни о каких COM-объектах, которые использует Ruby, мы будем злоупотреблять этим. Он помечен в реестре как ".exe drop target". Кажется, он "запускает" скрипт, передавая имена файлов в виде аргументов.
  3. Дважды щелкните «(по умолчанию)», чтобы открыть значение. Скопируйте направляющую, а затем отмените ее из поля редактирования.
  4. Теперь найдите "RubyFile" и "RubyWFile" внутри HKEY_CLASSES_ROOT. Первый предназначен для консольных сценариев, а второй, похоже, для сценариев с графическим интерфейсом. Если вы используете другой интерпретатор Ruby, чем я, или если вы установили обработчик по умолчанию самостоятельно, вы можете вместо этого найти ключи "rbfile" и / или "rbwfile".
  5. Щелкните правой кнопкой мыши один из ключей и создайте там новый ключ с именем "ShellEx", если он еще не существует. Затем создайте еще один ключ внутри этого нового, который называется "DropHandler".
  6. Отредактируйте значение по умолчанию в этом ключе DropHandler и вставьте GUID, скопированный на шаге 3. Нажмите ОК.
  7. Повторите шаги 5 и 6 с другим ключом.

Как только это будет сделано, вы сможете перетаскивать файлы на ваш скрипт.

2

На основе @cHau «s ответа, вот рег файл , который будет настроить поддержку вывода для сценариев Ruby (не полностью протестирован, вероятно , уничтожит ваш компьютер) (суть):

Windows Registry Editor Version 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}"
1

Я скомпилировал мою Ruby-программу с помощью OCRA gem, и она работает, если я перетаскиваю «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 или настройки программы открытия по умолчанию.

0

Попробуйте установить Ruby в качестве приложения по умолчанию для этих сценариев, используя расширение файла.

Смотрите здесь, как это сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .