Me gustaría usar un script de shell bash de la SendTocarpeta. Cuando pongo un acceso directo a un lote o exe en la SendTocarpeta, aparece en el Send Tosubmenú 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 .shque se ha asociado con bash.exe de MinGW.
Mi script de shell tiene una .shextensión y he intentado desasociar la .shextensió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 Tomenú 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.shcomo 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
readpruebas 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=ShellFiledespué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
sourceeliminació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
bashfunción de shell medianteSendTo(o mediante arrastrar y soltar). Como ejemplo utilicé el incorporadoecho. Establezca el objetivo para su enlace en laSendTocarpeta de la siguiente manera:Aquí
$0representa 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.readmantiene la ventana abierta para que pueda leer el mensaje. (bashProbé esto con cygwin's , pero creo que los mingw tambiénbashdeberí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 Bazson 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
System32lugar deSysWOW64si 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