Chciałbym użyć skryptu powłoki bash z SendTo
folderu. Kiedy umieszczam skrót do partii lub pliku exe w SendTo
folderze, pojawia się ono w Send To
podmenu kontekstu powłoki , ale gdy skrót wskazuje skrypt powłoki, nie robi tego.
System operacyjny, na którym testuję to jest Win7 Home Premium SP1. Rozszerzenie jest .sh
skojarzone z plikiem bash.exe programu MinGW.
Mój skrypt powłoki ma .sh
rozszerzenie i próbowałem odłączyć to .sh
rozszerzenie (myślę, że MinGW początkowo je skonfigurowało, ale to nie działało) za pomocą tego narzędzia i próbowałem ponownie powiązać je w celu bash, używając:
ftype ShellScript=c:\MinGW\msys\1.0\bin\bash.exe -c "'%1' %2"
assoc .sh=ShellScript
w admin cmd powłoki. Chociaż działa to w wierszu polecenia i powłoce Eksploratora (poprzez podwójne kliknięcie), nie pojawi się w Send To
menu i nie zaakceptuje parametru, przeciągając plik bezpośrednio na skrypt.
Czy ktoś wie, jak bym to zrobił?
Move to *dir*
), więc myślę, że z jakiegoś powodu nie przyjmuje parametrów, mimo że jest wykonywany po dwukrotnym kliknięciu. Wiesz, dlaczego tak by było?c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.sh
jako celu dla skrótuSendTo
?Odpowiedzi:
Umożliwi to przeciąganie i upuszczanie do dowolnego skryptu. Możesz umieścić jeden z nich w folderze SendTo i użyć go później.
Eksport rejestru:
W rzeczywistości część heksadecymalna jest
"C:\cygwin\bin\bash.exe -c "source $0;read" %1 %*"
zakodowana w eksporcie.Prawdopodobnie będziesz chciał usunąć
read
późniejsze testy, abyś mógł pisać skrypty, które wykonują zadanie bez wychodzenia z otwartego okna. Jeśli potrzebujesz tego dla pojedynczych skryptów, zawsze możesz dodać to dodać ich koniec.Użyj
assoc .ext=ShellFile
po zaimportowaniu, aby połączyć dowolne rozszerzenie pliku z tą funkcją. DropHandler w tym przykładzie działa w systemach Windows XP i Windows 7 (prawdopodobnie także w innych) i zasadniczo oznacza „uruchom polecenie, używając wszystkich usuniętych nazw plików jako argumentów”.Użyj tego jako skryptu (
echotest.ext
) do przetestowania podstawowej funkcjonalności:źródło
source
eliminującego wywołanie innej powłoki i odpowiedź na moje boczne pytanie dotyczące przeciągania i upuszczania. Niestety nie jest to główne pytanie, więc niestety nie dostaniesz nagrody. Ale dzięki. Próbowałem to rozgryźć bez powodzenia. (Y)source
to naprawdę dobry punkt. @Adrian: Teraz już wiesz, dlaczego SU nie pozwolił ci zbyt szybko przyznać nagrody. Odpowiedź IMHO Squeezy'ego zasługuje na nagrodę, ponieważ jego odpowiedź jest bardziej elegancka; jeśli czujesz się źle z tego powodu,;)
nadal możesz zaakceptować moją odpowiedź (ponieważ rozwiązało to również twój problem), ale nie miałbym nic przeciwko, tylko głosowanie.Oto jak przekazać argument do
bash
funkcji powłoki za pośrednictwemSendTo
(lub poprzez przeciąganie i upuszczanie). Jako przykład użyłem wbudowanegoecho
. Ustaw cel dla swojego łącza wSendTo
folderze w następujący sposób:Tutaj
$0
stoi na pierwszy argument po danej linii poleceń a) , czyli pełną nazwę pliku, w którym sendto działanie zostało wykonane.read
utrzymuje otwarte okno, abyś mógł przeczytać wiadomość. (Testowałem to zbash
cygwinem, ale myślę, że mingw teżbash
powinno działać.)W twoim przypadku celem powinien być
Teraz twój skrypt może przetwarzać nazwę pliku. Należy jednak pamiętać, że nazwa pliku jest przekazywana do skryptu jako pierwszy argument, więc w skrypcie nazwa pliku jest określana jako
$1
.Ostatnie, ale nie mniej ważne, tutaj dwa zrzuty ekranu jako podsumowanie:
a) zacytowałeś
man bash
:Aby to zrozumieć, użyj np. Następującej linii docelowej:
Będzie to wydrukować
This is Foo
, natomiastwydrukuje
This is Baz
. Zatem „ciąg znaków” jest wszystkim między apostrofami iFoo Bar Baz
jest argumentem.źródło
Jeśli system Windows odmawia połączenia z plikiem .sh, możesz spróbować użyć pliku .bat, który wywołuje skrypt .sh.
Jeśli to nie zadziała, możesz także spróbować skompilować plik .bat do pliku .exe.
Znaleziono szybkie Google:
Kompilator wsadowy
Bat-To-Exe
źródło
Wypróbuj zaktualizowaną wersję pliku REG (uwaga: używam 64-bitowego systemu Windows 7; użyj
System32
zamiast tego,SysWOW64
jeśli masz 32-bitowy system Windows 7 , Vista lub XP):Pozwoli to na uruchamianie skryptów powłoki jako Administrator, podobnie jak każdy plik .bat. Innymi słowy, sprawia, że wszystkie skrypty powłoki UAC są kompatybilne podczas korzystania z systemu Windows Vista i Windows 7 lub 8.
źródło