Можно ли использовать скрипт оболочки в папке 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.
Быстрый гугл нашел:
Попробуйте эту обновленную версию файла 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.