Me gustaría usar un script de shell bash de la SendTo
carpeta. Cuando pongo un acceso directo a un lote o exe en la SendTo
carpeta, aparece en el Send To
submenú de contexto de shell , pero cuando el acceso directo apunta a un script de shell, no lo hace.
El sistema operativo en el que estoy probando esto es Win7 Home Premium SP1. La extensión es la .sh
que se ha asociado con bash.exe de MinGW.
Mi script de shell tiene una .sh
extensión y he intentado desasociar la .sh
extensión (creo que MinGW la configuró inicialmente, pero eso no funcionó) usando esta utilidad e intenté asociarla a bash usando:
ftype ShellScript=c:\MinGW\msys\1.0\bin\bash.exe -c "'%1' %2"
assoc .sh=ShellScript
en un administrador cmd shell. Aunque esto funciona en un símbolo del sistema y el shell del Explorador (mediante doble clic), no aparecerá en el Send To
menú y no aceptará un parámetro arrastrando un archivo directamente sobre el script.
¿Alguien sabe cómo haría esto?
Move to *dir*
), así que estoy pensando que no está tomando parámetros por alguna razón, aunque se ejecute si se hace doble clic en él. ¿Alguna idea de por qué esto sería así?c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.sh
como objetivo para el atajoSendTo
?Respuestas:
Esto permitirá arrastrar y soltar cualquier script. Puede colocar uno de ellos en la carpeta SendTo y usarlo después.
Exportación de registro:
La parte hexadecimal es la
"C:\cygwin\bin\bash.exe -c "source $0;read" %1 %*"
que se codifica en la exportación.Probablemente querrá eliminar las
read
pruebas posteriores, para poder escribir scripts que solo realicen una tarea sin salir de una ventana abierta. Si necesita esto para scripts individuales, siempre puede agregarlo y agregar su final.Use
assoc .ext=ShellFile
después de importar para vincular cualquier extensión de archivo que desee con esta funcionalidad. El DropHandler en este ejemplo funciona para Windows XP y Windows 7 (probablemente también para otros) y básicamente significa "ejecutar el comando, con todos los nombres de archivo descartados como argumentos".Use esto como un script (
echotest.ext
) para probar la funcionalidad básica:fuente
source
eliminación de la invocación de otro shell y responder mi pregunta secundaria sobre arrastrar y soltar. Desafortunadamente, no es la pregunta principal, por lo que desafortunadamente no obtendrá la recompensa. Pero gracias. Traté de resolver esto sin éxito. (Y)source
, este es realmente un buen punto. @Adrian: Ahora ya sabes, por qué SU no te permitió otorgar la recompensa demasiado rápido. En mi humilde opinión, la respuesta de Squeezy merece la recompensa, porque su respuesta es más elegante; si te sientes mal por eso;)
, aún puedes aceptar mi respuesta (ya que también resolvió tu problema), pero también estaría bien solo con el voto positivo.Aquí se explica cómo pasar un argumento a una
bash
función de shell medianteSendTo
(o mediante arrastrar y soltar). Como ejemplo utilicé el incorporadoecho
. Establezca el objetivo para su enlace en laSendTo
carpeta de la siguiente manera:Aquí
$0
representa el primer argumento después de la línea de comando dada a) , es decir, el nombre de archivo completo del archivo en el que se ejecutó la acción sendto.read
mantiene la ventana abierta para que pueda leer el mensaje. (bash
Probé esto con cygwin's , pero creo que los mingw tambiénbash
deberían funcionar).En su caso, el objetivo debe ser
Ahora su script puede procesar el nombre del archivo. Pero tenga en cuenta que el nombre de archivo se pasa al script como primer argumento, por lo que dentro del script se hace referencia al nombre de archivo como
$1
.Por último, pero no menos importante, aquí hay dos capturas de pantalla como resumen:
a) Usted citó
man bash
:Para entender eso, use, por ejemplo, la siguiente línea de destino:
Esto imprimirá
This is Foo
, mientrasimprimirá
This is Baz
. Entonces la "cadena" es todo entre los apóstrofes, yFoo Bar Baz
son los argumentos.fuente
Si Windows se niega a vincular a un archivo .sh, tal vez podría intentar usar un archivo .bat que invoque el script .sh.
Si eso no funciona, también puede intentar compilar el .bat en .exe.
Un google rápido encontrado:
Compilador de lotes
Bat-To-Exe
fuente
Pruebe esta versión actualizada del archivo REG (tenga en cuenta que uso Windows 7 de 64 bits; use en
System32
lugar deSysWOW64
si tiene Win7, Vista o XP de 32 bits):Esto permitirá que sus scripts de shell también se ejecuten como administrador, al igual que cualquier archivo .bat. En otras palabras, hace que todos los scripts de shell sean compatibles con UAC cuando se usa Windows Vista y Windows 7 u 8.
fuente