Apakah mungkin menggunakan skrip shell di folder sendto?

8

Saya ingin menggunakan skrip bash shell dari SendTofolder. Ketika saya meletakkan shortcut ke batch atau exe ke SendTofolder itu muncul di Send Tosubmenu konteks shell , tetapi ketika shortcut menunjuk ke skrip shell itu tidak.

OS yang saya uji ini adalah Win7 Home Premium SP1. Ekstensi tersebut .shtelah dikaitkan dengan bash.exe MinGW.

Skrip shell saya memiliki .shekstensi dan saya telah mencoba melepaskan .shekstensi tersebut (saya pikir MinGW mengaturnya pada awalnya, tetapi itu tidak berfungsi) menggunakan utilitas ini dan mencoba menghubungkannya kembali ke bash menggunakan:

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

di shell admin cmd. Meskipun ini bekerja pada prompt perintah dan shell Explorer (melalui klik dua kali), itu tidak akan muncul di Send Tomenu dan tidak akan menerima parameter dengan menyeret file di atas skrip secara langsung.

Adakah yang tahu bagaimana saya akan melakukan ini?

Adrian
sumber
1
Apakah Explorer menjalankan skrip bash shell jika Anda mengklik dua kali pintasan ke skrip shell? Apakah pintasan hanya untuk skrip shell atau untuk bash yang diparameterisasi dengan skrip shell?
Werner Henze
apa ekstensi file dari skrip? sudahkah Anda membuat asosiasi tipe file untuk tipe itu? windows tidak dapat memproses garis bang jika ada. bash-for-windows mana yang Anda gunakan?
Frank Thomas
@ FrankThomas: Saya telah menambahkan info tambahan yang Anda minta ke pertanyaan.
Adrian
@WernerHenze: Upaya menyeret file melalui tautan ke skrip menyebabkan muncul lingkaran merah dengan tanda silang. Mencoba untuk meletakkannya langsung di atas skrip tidak bekerja dengan baik (mengatakan Move to *dir*), jadi saya berpikir bahwa itu tidak mengambil parameter untuk beberapa alasan meskipun dieksekusi jika diklik dua kali. Adakah yang tahu mengapa hal ini terjadi?
Adrian
Saya tidak menemukan jawaban untuk pertanyaan kedua Werner Henze, jadi dalam arah yang sama: Apakah Anda mencoba menggunakan c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.shsebagai target pintasan SendTo?
mpy

Jawaban:

4

Ini akan memungkinkan Drag & Drop ke skrip apa pun. Anda dapat menempatkan salah satunya di folder KirimKe dan menggunakannya sesudahnya.

Ekspor Registri:

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}"

Bagian heks sebenarnya adalah "C:\cygwin\bin\bash.exe -c "source $0;read" %1 %*"yang dikodekan dalam ekspor.

Anda mungkin ingin menghapus readpengujian setelah, sehingga Anda dapat menulis skrip yang hanya melakukan tugas tanpa meninggalkan jendela yang terbuka. Jika Anda membutuhkan ini untuk skrip tunggal, Anda selalu dapat menambahkannya dan menambahkannya.

Gunakan assoc .ext=ShellFilesetelah mengimpor untuk menautkan ekstensi file apa pun yang Anda inginkan dengan fungsi ini. DropHandler dalam contoh ini berfungsi untuk Windows XP dan Windows 7 (mungkin yang lain juga) dan pada dasarnya berarti "jalankan perintah, dengan semua nama file yang dibuang sebagai argumen".

Gunakan ini sebagai skrip ( echotest.ext) untuk menguji fungsionalitas dasar:

echo $0 $*;
Terjepit
sumber
1 untuk menggunakan sourcemenghilangkan permintaan shell lain dan menjawab pertanyaan sisi saya tentang seret dan lepas. Sayangnya itu bukan pertanyaan utama, jadi sayangnya Anda tidak akan mendapatkan hadiahnya. Tapi terima kasih. Saya mencoba mencari tahu ini tanpa hasil. (Y)
Adrian
Ini akan memungkinkan Anda untuk langsung menggunakan skrip shell di folder SendTo, alih-alih membuat tautan ke bash.exe dengan parameter skrip. Saya benar-benar percaya ini menjawab pertanyaan Anda, sedangkan jawaban yang diterima memberikan solusi. Namun tidak akan berdebat: P
Squeezy
Oh, bagus untuk tahu. Terima kasih. Hmmm, tidak yakin siapa yang harus memberikan hadiah itu. :(
Adrian
mpy, dia memecahkan masalahmu dulu. Saya baru saja menyelesaikan ini, karena penasaran. Saya juga tidak bisa berhenti menggunakan SendTo dan Drag & Drop ke skrip, jadi itu akan menjadi hadiah saya!
Terjepit
+1 juga dari saya untuk source, ini benar-benar poin yang bagus. @Adrian: Sekarang Anda tahu, mengapa SU tidak membiarkan Anda memberi hadiah terlalu cepat. Jawaban IMHO Squeezy layak mendapatkan hadiah, karena jawabannya lebih elegan; jika Anda merasa buruk tentang itu ;)Anda masih dapat menerima jawaban saya (karena itu memecahkan masalah Anda juga), tetapi saya juga akan baik-baik saja dengan upvote saja.
mpy
4

Berikut ini cara menyampaikan argumen ke bashfungsi shell via SendTo(atau via drag & drop). Sebagai contoh saya menggunakan builtin echo. Tetapkan target untuk tautan Anda di SendTofolder sebagai berikut:

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

Di sini $0singkatan argumen pertama setelah baris perintah yang diberikan a) , yaitu nama file lengkap dari file di mana tindakan sendto dieksekusi. readmenjaga jendela tetap terbuka, sehingga Anda dapat membaca pesan. (Saya mengujinya dengan cygwin bash, tapi saya pikir mingw juga bashbisa digunakan.)

Dalam kasus Anda, targetnya seharusnya

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

Sekarang skrip Anda dapat memproses nama file. Tetapi perhatikan, bahwa nama file diteruskan ke skrip sebagai argumen pertama , jadi di dalam skrip nama file dirujuk sebagai$1 .


Terakhir, namun yang tidak kalah penting, berikut adalah dua tangkapan layar sebagai ringkasan:

masukkan deskripsi gambar di sini


masukkan deskripsi gambar di sini


a) Anda mengutip man bash:

-c stringJika opsi -c hadir, maka perintah dibaca dari string. Jika ada argumen setelah string, mereka ditugaskan ke parameter posisi, dimulai dengan $ 0.

Untuk memahami hal itu, gunakan misalnya garis target berikut:

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

Ini akan mencetak This is Foo, sementara

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

akan dicetak This is Baz. Jadi "string" adalah segalanya di antara apostrof, dan Foo Bar Bazmerupakan argumennya.

mpy
sumber
1
Ahhh, itu maksudnya. Masuk akal sekarang. Terima kasih. Saya akan memberi Anda hadiah begitu SO akan membiarkan saya. (mengatakan bahwa saya dapat melakukannya dalam 11 jam untuk beberapa alasan mengangkat bahu )
Adrian
0

Jika Windows menolak untuk menautkan ke file .sh, Anda mungkin dapat mencoba menggunakan file .bat yang memanggil skrip .sh.

Jika itu tidak berhasil, Anda juga bisa mencoba mengkompilasi .bat ke .exe.
Google cepat ditemukan:

Batch Compiler
Bat-To-Exe

harrymc
sumber
Saya tahu bahwa saya bisa menggunakan proxy bat atau exe. Saya ingin tahu apakah itu bisa dilakukan tanpa proxy.
Adrian
0

Coba versi terbaru dari file REG (perhatikan bahwa saya menggunakan Windows 7 64-bit; gunakan System32sebagai ganti SysWOW64jika Anda memiliki Win7, Vista, atau XP 32-bit):

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}"

Ini akan memungkinkan skrip shell Anda juga dijalankan sebagai Administrator seperti halnya file bat. Dengan kata lain, itu membuat semua skrip shell UAC kompatibel saat menggunakan Windows Vista dan Windows 7 atau 8.

kramlat
sumber