sendtoフォルダーでシェルスクリプトを使用することはできますか?


8

SendToフォルダーからbashシェルスクリプトを使用したいと思います。バッチまたはexeへのショートカットをSendToフォルダーに配置すると、シェルSend Toコンテキストサブメニューに表示されますが、ショートカットがシェルスクリプトを指している場合は表示されません。

これをテストしているOSは、Win7 Home Premium SP1です。拡張子は.shMinGWのbash.exeに関連付けられています。

私のシェルスクリプトには.sh拡張機能があり.shこのユーティリティを使用して拡張機能の関連付けを解除しようとしました(MinGWは最初に設定したと思いますが、機能しませんでした)。

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

管理コマンドシェル。これはコマンドプロンプトとエクスプローラーシェル(ダブルクリック)で機能しSend Toますが、メニューに表示されず、スクリプトの上にファイルを直接ドラッグしてもパラメーターを受け入れません。

誰か私がこれをどのように行うか知っていますか?


1
シェルスクリプトへのショートカットをダブルクリックした場合、エクスプローラーはbashシェルスクリプトを実行しますか?ショートカットはシェルスクリプトだけですか、それともシェルスクリプトでパラメーター化されたbashですか?
Werner Henze 2013年

スクリプトのファイル拡張子は何ですか?そのタイプのファイルタイプの関連付けを確立しましたか?ウィンドウが存在する場合、強打線を処理できません。どのbash-for-windowsを使用していますか?
フランクトーマス

@FrankThomas:あなたがリクエストした追加情報を質問に追加しました。
エイドリアン

@WernerHenze:ファイルをリンクからスクリプトにドラッグしようとすると、十字の付いた赤い丸が表示されます。スクリプト上に直接配置しようとしても機能しないMove to *dir*ため(たとえば)、ダブルクリックすると実行されますが、何らかの理由でパラメーターを取得していないと思います。なぜこれがそうなるのでしょうか?
エイドリアン

ヴェルナーヘンツェの2番目の質問に対する答えが見つからないので、同様の方向で:c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.shのショートカットのターゲットとして使用しようとしましたSendToか?
mpy 2013年

回答:


4

これにより、任意のスクリプトへのドラッグアンドドロップが可能になります。それらの1つを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}"

16進数の部分は実際に"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)
エイドリアン

これにより、スクリプトのパラメーターを使用してbash.exeへのリンクを作成する代わりに、SendToフォルダー内のシェルスクリプトを直接使用できます。私は実際にこれがあなたの質問に答えると信じていますが、受け入れられた答えは回避策を提供します。ただし、論争するつもりはありません:P
Squeezy 2013年

ああ、知っておくと良い。ありがとう。ええと、誰に賞金を与えるかわかりません。:(
エイドリアン

mpy、彼はあなたの問題を最初に解決しました。私は好奇心からこれを解決しました。それ以来、スクリプトへのSendToとDrag&Dropの使用を止めることができないので、それが私の賞品となるでしょう!
Squeezy 2013年

私からの+1もsource、これは本当に良い点です。@エイドリアン:わかったよ、なぜSUが賞金をあまりにも早く落とさせなかったのか。私見のスクイージーの答えは、彼の答えがよりエレガントであるため、賞金に値します。;)あなたがそれでもあなたが私の答えを受け入れることができることについて気分が悪い場合は(それもあなたの問題を解決したので)、私は賛成票のみでも大丈夫だと思います。
mpy

4

以下は、bashシェル関数にSendTo(またはドラッグアンドドロップで)引数を渡す方法です。例として、組み込みを使用しましたechoSendTo次のように、フォルダ内のリンクのターゲットを設定します。

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

ここで$0は、指定さたコマンドラインa)のの最初の引数、つまりsendtoアクションが実行されたファイルの完全なファイル名を表します。readメッセージを読むことができるようにウィンドウを開いたままにします。(私はこれをcygwinでテストしましたbashが、mingwも機能するbashはずです。)

あなたの場合、ターゲットは

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

これで、スクリプトでファイル名を処理できます。ただし、ファイル名は最初の引数としてスクリプトに渡されるため、スクリプト内ではファイル名はとして参照される$1ことに注意してください。


最後に、重要な点として、2つのスクリーンショットをまとめます。

ここに画像の説明を入力してください


ここに画像の説明を入力してください


a)引用した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
ああ、そういう意味だ。今では理にかなっています。ありがとうございました。SOが私を許可してくれたらすぐに賞金を差し上げます。(なんとか肩をすくめて 11時間でできると言う)
エイドリアン

0

Windowsが.shファイルへのリンクを拒否した場合は、.shスクリプトを呼び出す.batファイルを使用してみてください。

それが機能しない場合は、.batを.exeにコンパイルしてみることもできます。
簡単なグーグルが見つかりました:

バッチコンパイラ
Bat-To-Exe


プロキシバットまたはexeを使用できることを知っています。そのようなプロキシなしでそれができるかどうか知りたいのですが。
エイドリアン

0

この更新版のREGファイルを試してください(64ビットのWindows 7を使用しています。32ビットのWin7、Vista、またはXPを使用している場合System32SysWOW64、代わりに使用してください)。

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ファイルと同じように、シェルスクリプトを管理者として実行することができます。つまり、Windows VistaおよびWindows 7または8を使用する場合、すべてのシェルスクリプトをUAC互換にします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.