Можно ли использовать скрипт оболочки в папке sendto?

Я хотел бы использовать скрипт оболочки bash из SendTo папка. Когда я ставлю ярлык на пакет или exe вSendTo папка это отображается в оболочке Send To контекстное подменю, но когда ярлык указывает на сценарий оболочки, это не так.

ОС, на которой я тестирую это Win7 Home Premium SP1. Расширение .sh который был связан с MinGW's bash.exe.

Мой сценарий оболочки имеет .sh расширение, и я пытался разобщить .sh расширение (я думаю, что MinGW установил его изначально, но это не сработало) с помощью этой утилиты и попыталось повторно связать его с bash, используя:

ftype ShellScript=c:\MinGW\msys\1.0\bin\bash.exe -c "'%1' %2"
assoc .sh=ShellScript

в командной оболочке администратора. Хотя это работает в командной строке и в оболочке Explorer (с помощью двойного щелчка), оно не будет отображаться в Send To меню, и он не примет параметр, перетаскивая файл поверх скрипта напрямую.

Кто-нибудь знает, как я это сделаю?

4 ответа

Решение

Это включит Drag & Drop для любого скрипта. Вы можете поместить один из них в папку SendTo и использовать его впоследствии.

Экспорт реестра:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ShellFile]

[HKEY_CLASSES_ROOT\ShellFile\Shell]

[HKEY_CLASSES_ROOT\ShellFile\Shell\Open]

[HKEY_CLASSES_ROOT\ShellFile\Shell\Open\Command]
@=hex(2):43,00,3a,00,5c,00,70,00,61,00,74,00,68,00,5f,00,65,00,78,00,74,00,5c,\
  00,62,00,61,00,73,00,68,00,2e,00,65,00,78,00,65,00,20,00,2d,00,63,00,20,00,\
  22,00,73,00,6f,00,75,00,72,00,63,00,65,00,20,00,24,00,30,00,3b,00,72,00,65,\
  00,61,00,64,00,22,00,20,00,25,00,31,00,20,00,25,00,2a,00,00,00

[HKEY_CLASSES_ROOT\ShellFile\ShellEx]

[HKEY_CLASSES_ROOT\ShellFile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

Шестнадцатеричная часть на самом деле "C:\cygwin\bin\bash.exe -c "source $0;read" %1 %*" который кодируется в экспорте.

Вы, вероятно, захотите удалить read после тестирования, так что вы можете написать сценарии, которые просто выполняют задачу, не выходя из открытого окна. Если вам это нужно для отдельных сценариев, вы всегда можете добавить его в конец.

использование assoc .ext=ShellFile после импорта, чтобы связать любое расширение файла, которое вы хотите с этой функциональностью. DropHandler в этом примере работает для Windows XP и Windows 7 (возможно, также и для других) и в основном означает "выполнить команду со всеми удаленными именами файлов в качестве аргументов".

Используйте это как скрипт (echotest.ext) проверить основные функциональные возможности:

echo $0 $*;

Вот как передать аргумент bash функция оболочки через SendTo (или с помощью перетаскивания). В качестве примера я использовал встроенный echo , Установите цель для вашей ссылки в SendTo папка следующим образом:

C:\cygwin\bin\bash.exe -c "echo Argument: $0; read"

Вот $0 обозначает первый аргумент после заданной командной строки a) , то есть полное имя файла, для которого было выполнено действие sendto. read держит окно открытым, чтобы вы могли прочитать сообщение. (Я проверил это с Cygwin's bash , но я думаю, что Mingw bash должно работать тоже.)

В вашем случае цель должна быть

c:\MinGW\msys\1.0\bin\bash.exe -c "/path/to/your/script.sh $0; read"

Теперь ваш скрипт может обрабатывать имя файла. Но обратите внимание, что имя файла передается сценарию в качестве первого аргумента, поэтому внутри сценария имя файла указывается как $1 ,


Наконец, что не менее важно, вот два скриншота в качестве резюме:

введите описание здесь


введите описание здесь


а) Вы цитировали man bash :

-c string Если указана опция -c, то команды читаются из строки. Если после строки есть аргументы, они присваиваются позиционным параметрам, начиная с $ 0.

Чтобы понять это, используйте, например, следующую целевую строку:

C:\cygwin\bin\bash.exe -c "echo This is $0; read" Foo Bar Baz

Это напечатает This is Foo , в то время как

C:\cygwin\bin\bash.exe -c "echo This is $2; read" Foo Bar Baz

распечатает This is Baz , Таким образом, "строка" это все, что между апострофами, и Foo Bar Baz аргументы.

Если Windows отказывается ссылаться на файл.sh, вы можете попробовать использовать файл.bat, который вызывает скрипт.sh.

Если это не сработает, попробуйте также скомпилировать.bat в.exe.
Быстрый гугл нашел:

Пакетный компилятор
Бат-To-Exe

Попробуйте эту обновленную версию файла REG (обратите внимание, я использую 64-битную Windows 7; используйте System32 вместо SysWOW64 если у вас 32-битная Win7, Vista или XP):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\ShellFile]
@="Shell Script"

[HKEY_CLASSES_ROOT\ShellFile\DefaultIcon]
@="C:Windows\\SysWOW64\\imageres.dll,-68"

[HKEY_CLASSES_ROOT\ShellFile\shell]

[HKEY_CLASSES_ROOT\ShellFile\shell\edit]

[HKEY_CLASSES_ROOT\ShellFile\shell\edit\command]
@="C:\\Windows\\SysWOW64\\NOTEPAD.EXE %1"

[HKEY_CLASSES_ROOT\ShellFile\shell\open]
"EditFlags"=hex:00,00,00,00

[HKEY_CLASSES_ROOT\ShellFile\shell\open\command]
@="C:\\MinGW\\msys\\1.0\\bin\\bash.exe -c \"source $0;\" \"%1 %*\""

[HKEY_CLASSES_ROOT\ShellFile\shell\print]

[HKEY_CLASSES_ROOT\ShellFile\shell\print\command]
@="C:\\Windows\\SysWOW64\\NOTEPAD.EXE /p %1"

[HKEY_CLASSES_ROOT\ShellFile\shell\runas]
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\ShellFile\shell\runas\command]
@="C:\\MinGW\\msys\\1.0\\bin\\bash.exe -c \"source $0;\" \"%1 %*\""

[HKEY_CLASSES_ROOT\ShellFile\shell\runasuser]
@="@shell32.dll,-50944"
"Extended"=""
"SuppressionPolicyEx"="{F211AA05-D4DF-4370-A2A0-9F19C09756A7}"

[HKEY_CLASSES_ROOT\ShellFile\shell\runasuser\command]
"DelegatExecute"="{ea72d00e-4960-42fa-ba92-7792a7944c1d}"

[HKEY_CLASSES_ROOT\ShellFile\ShellEx]

[HKEY_CLASSES_ROOT\ShellFile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

Это позволит вашим сценариям оболочки запускаться от имени администратора так же, как и любой файл.bat. Другими словами, он делает все сценарии оболочки UAC-совместимыми при использовании Windows Vista и Windows 7 или 8.

Другие вопросы по тегам