Ich möchte ein Bash-Shell-Skript aus dem SendTo
Ordner verwenden. Wenn ich eine Verknüpfung zu einem Stapel oder einer Exe in den SendTo
Ordner lege, wird diese im Send To
Untermenü des Shell- Kontexts angezeigt, aber wenn die Verknüpfung auf ein Shell-Skript verweist, wird dies nicht der Fall sein.
Das Betriebssystem, auf dem ich dies teste, ist Win7 Home Premium SP1. Die Erweiterung .sh
wurde mit der bash.exe von MinGW verknüpft.
Mein Shell-Skript hat eine .sh
Erweiterung und ich habe versucht, die .sh
Erweiterung mit diesem Dienstprogramm zu trennen (ich glaube, MinGW hat sie ursprünglich eingerichtet, aber das hat nicht funktioniert) und versucht, sie erneut mit bash zu verknüpfen, indem ich :
ftype ShellScript=c:\MinGW\msys\1.0\bin\bash.exe -c "'%1' %2"
assoc .sh=ShellScript
in einer Admin-Cmd-Shell. Dies funktioniert zwar an einer Eingabeaufforderung und in der Explorer-Shell (per Doppelklick), wird jedoch nicht im Send To
Menü angezeigt und akzeptiert keinen Parameter, indem eine Datei direkt über das Skript gezogen wird.
Weiß jemand, wie ich das machen würde?
Move to *dir*
), daher denke ich, dass es aus irgendeinem Grund keine Parameter akzeptiert, obwohl es ausgeführt wird, wenn Sie darauf doppelklicken. Irgendeine Idee, warum das so wäre?c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.sh
als Ziel für die Verknüpfung zu verwendenSendTo
?Antworten:
Dadurch wird Drag & Drop für jedes Skript aktiviert. Sie können einen davon in den SendTo-Ordner legen und anschließend verwenden.
Registrierungsexport:
Der Hex-Teil ist tatsächlich
"C:\cygwin\bin\bash.exe -c "source $0;read" %1 %*"
derjenige, der beim Export codiert wird.Wahrscheinlich möchten Sie das
read
nach dem Testen entfernen , damit Sie Skripte schreiben können, die nur eine Aufgabe ausführen, ohne ein offenes Fenster zu verlassen. Wenn Sie dies für einzelne Skripte benötigen, können Sie es jederzeit hinzufügen und deren Ende hinzufügen.Verwenden
assoc .ext=ShellFile
Sie diese Option nach dem Importieren, um eine beliebige Dateierweiterung mit dieser Funktionalität zu verknüpfen. Der DropHandler in diesem Beispiel funktioniert unter Windows XP und Windows 7 (wahrscheinlich auch unter anderen) und bedeutet im Grunde "Befehl ausführen, wobei alle abgelegten Dateinamen als Argumente dienen".Verwenden Sie dies als Skript (
echotest.ext
), um grundlegende Funktionen zu testen:quelle
source
Beseitigung des Aufrufs einer anderen Shell und die Beantwortung meiner Nebenfrage zu Drag & Drop. Leider ist es nicht die Hauptfrage, so dass Sie leider nicht das Kopfgeld bekommen. Aber danke. Ich habe versucht, dies ohne Erfolg herauszufinden. (Y)source
, das ist wirklich ein guter Punkt. @Adrian: Jetzt weißt du, warum SU dich das Kopfgeld nicht zu schnell vergeben ließ. IMHO Squeezys Antwort verdient das Kopfgeld, weil seine Antwort eleganter ist; Wenn du dich darüber schlecht fühlst,;)
kannst du meine Antwort immer noch akzeptieren (da sie auch dein Problem gelöst hat), aber ich würde auch nur mit Upvote zurechtkommen.Hier erfahren Sie, wie Sie ein Argument
bash
überSendTo
(oder per Drag & Drop) an eine Shell-Funktion übergeben . Als Beispiel habe ich das eingebaute verwendetecho
. Legen Sie das Ziel für Ihren Link imSendTo
Ordner wie folgt fest:Hier
$0
steht für das erste Argument nach der angegebenen Befehlszeile a) , dh den vollständigen Dateinamen der Datei, für die die sendto-Aktion ausgeführt wurde.read
hält das Fenster offen, damit Sie die Nachricht lesen können. (Ich habe dies mit Cygwin getestetbash
, aber ich denke, Mingwbash
sollte auch funktionieren.)In Ihrem Fall sollte das Ziel sein
Jetzt kann Ihr Skript den Dateinamen verarbeiten. Beachten Sie jedoch, dass der Dateiname als erstes Argument an das Skript übergeben wird , sodass innerhalb des Skripts auf den Dateinamen verwiesen wird
$1
.Zu guter Letzt hier zwei Screenshots als Zusammenfassung:
a) Sie zitierten
man bash
:Um dies zu verstehen, verwenden Sie zB die folgende Ziellinie:
Dies wird gedruckt
This is Foo
, währendwird gedruckt
This is Baz
. Die "Zeichenfolge" ist also alles zwischen den Apostrophen undFoo Bar Baz
sind die Argumente.quelle
Wenn Windows sich weigert, eine Verknüpfung zu einer .sh-Datei herzustellen, können Sie möglicherweise versuchen, eine .bat-Datei zu verwenden, die das .sh-Skript aufruft.
Wenn das nicht funktioniert, können Sie auch versuchen, die .bat in .exe zu kompilieren.
Eine schnelle Google gefunden:
Batch-Compiler
Bat-To-Exe
quelle
Probieren Sie diese aktualisierte Version der REG-Datei aus (Hinweis: Ich verwende 64-Bit-Windows 7;
System32
anstelle vonSysWOW64
32-Bit -Windows 7 , Vista oder XP):Auf diese Weise können Ihre Shell-Skripte wie jede .bat-Datei auch als Administrator ausgeführt werden. Mit anderen Worten, es macht alle Shell-Skripte UAC-kompatibel, wenn Windows Vista und Windows 7 oder 8 verwendet werden.
quelle