Чи можливо використовувати скрипт оболонки в папці sendto?


9

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

ОС, на якій я тестую це Win7 Home Premium SP1. Розширення .shпов'язане з bash.exe MinGW.

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

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

в оболонці адміністратора cmd. Хоча це працює в командному рядку та оболонці Провідника (за допомогою подвійного клацання), воно не з’явиться в Send Toменю, і він не прийме параметр, перетягуючи файл безпосередньо на скрипт.

Хтось знає, як я це зробив?


1
Чи запускає Explorer скрипт bash shell, якщо двічі клацнути ярлик до сценарію оболонки? Це ярлик лише для сценарію оболонки або для bash, параметризованого сценарієм оболонки?
Вернер Гензе

що таке розширення файлу скрипту? Ви створили асоціацію типу файлів для цього типу? windows не може обробити лінію вибуху, якщо вона присутня. який ви використовуєте?
Френк Томас

@FrankThomas: Я додав додаткову інформацію, яку ви запитували до питання.
Адріан

@WernerHenze: Спроба перетягнути файл через посилання на скрипт викликає появу червоного кола з хрестом. Спроба розмістити його безпосередньо над сценарієм теж не працює (каже Move to *dir*), тому я думаю, що він чомусь не приймає параметри, навіть якщо він виконується, якщо клацнути двічі. Будь-яка ідея, чому це було б так?
Адріан

Я не знаходжу відповіді на друге запитання Вернера Гензе, тому в аналогічному напрямку: Ви намагалися використовувати c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.shяк ціль для ярлика SendTo?
mpy

Відповіді:


4

Це дозволить перетягнути і перетягнути в будь-який сценарій. Ви можете розмістити одну з них у папці 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 $*;

+1 за використання sourceусунення виклику іншої оболонки та відповіді на моє бічне запитання про перетягування. На жаль, це не головне питання, тому, на жаль, ви не отримаєте винагороду. Але спасибі Я намагався це зрозуміти без успіху. (Y)
Адріан

Це дозволить вам безпосередньо використовувати оболонки в папці SendTo, а не створювати посилання на bash.exe з параметром сценарію. Я фактично вважаю, що це відповідає на ваше запитання, тоді як прийнята відповідь дає вирішення. Не збираюся сперечатися, хоча: P
Squeezy

О, добре знати. Дякую. Хммм, не впевнений, кому тоді дати винагороду. :(
Адріан

mpy, він вирішив вашу проблему спочатку. Я щойно це розробив із цікавості. Крім того, я не можу припинити використання SendTo і Drag & Drop для сценаріїв з тих пір, тому це буде моїм призом!
Squeezy

+1 також від мене source, це справді хороший момент. @Adrian: Тепер ви знаєте, чому SU не дозволило вам присуджувати суму занадто швидко. Відповідь ІМХО Скезі заслуговує на винагороду, тому що його відповідь більш елегантна; якщо ви погано почуваєтесь, що ;)ви все одно можете прийняти мою відповідь (оскільки це теж вирішило вашу проблему), але я також був би в порядку лише з нагодою.
mpy

4

Ось як передати аргумент 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це аргументи.


1
А-а-а, ось що це означало. Має сенс зараз. Дякую. Я нагороджу вас винагородою, як тільки дозволить мені. (каже, що я можу це зробити через 11 годин чомусь знизати плечима )
Адріан

0

Якщо Windows відмовляється від посилання на файл .sh, ви можете спробувати скористатися файлом .bat, який викликає скрипт .sh.

Якщо це не працює, ви також можете спробувати скласти .bat в .exe.
Швидкий пошук Google знайшов:

Компілятор партії
Bat-To-Exe


Я знаю, що можу використовувати проксі-бат або exe. Я хотів би знати, чи можна це зробити без такого проксі.
Адріан

0

Спробуйте цю оновлену версію файлу 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.