Agregué mi primer menú contextual usando el registro según las instrucciones dadas enesta pregunta(me yay).
Originalmente usé esto como el comando que ejecuta, es decir, el valor de la tecla "comando":
Cmd /C Powershell "imageSeqView --% \"%1\""
ImageSeqView
es el nombre de mi función de PowerShell, la importo en mi perfil de PowerShell. Funciona bien, pero me pregunto: ¿por qué utilizar cmd
open Powershell
para ejecutar la función? ¿No sería más sencillo simplemente hacer
Powershell "imageSeqView --% \"%1\""
Ese comando parece funcionar bien, pero como su uso parece canónico, cmd
me pregunto si está matando cachorros en secreto o algo así.
Respuesta1
No hay una buena razón para hacer esto. De hecho, el único efecto real que se produce es el de ralentizar las cosas.
La gente podría pensar que hay una buena razón para hacer esto. El uso de CMD tiene los siguientes efectos que comúnmente pueden ser buenos en algunos casos:
- Habilita comandos internos, como "
DIR
" - Establece variables de entorno, como la variable PATH.
Sin embargo, en este caso, no se obtiene ninguno de esos beneficios. Veamos ambos escenarios:
Por lo tanto, en algunos casos puede haber un momento en el que usar " CMD /C
" sea útil. Por ejemplo, si uso el comando externo PSEXEC
(descargado de SysInternals) e intento ejecutar " DIR
" en una computadora remota, Windows intentará ejecutar el DIR
comando " ". Windows no podrá ejecutar ese comando ya que no hay ningún archivo " DIR.EXE
", " DIR.BAT
" o " DIR
" que termine con otra extensión compatible. (Las extensiones compatibles se pueden ver ejecutando " ECHO %PATHEXT%
".)
Sin embargo, en este escenario, si intento ejecutar " CMD /C DIR
", entonces funcionará, porque Windows buscará un ejecutable llamado " CMD
", lo encontrará y luego CMD
terminará ejecutando exitosamente el DIR
comando " ", que es un comando interno. parte del CMD
comando " ".
En este caso, puede ejecutar powershell
tan fácilmente como " CMD /C powershell
", por lo que no obtendrá ningún beneficio del innecesario " CMD /C
". El único beneficio que veo al realizar el paso adicional de escribir " CMD /C
" es proporcionar un ejemplo que será útil si alguien decide intentar modificar un ejemplo para ejecutar una línea de comando " DIR
" o " COPY
". Tener un ejemplo más flexible puede resultar útil para algunas personas. Realmente no es necesario cuando la gente sabe lo que está haciendo.
En cuanto al segundo punto que proporcioné, que es establecer variables de entorno, eso también es algo que no estás haciendo activamente en este caso particular. Quizás algunas personas piensen que están ayudando al establecer la variable de entorno PATH. Sin embargo, cuando ejecuta comandos directamente (por ejemplo, desde la opción de menú "Ejecutar" del menú Inicio), el sistema operativo Windows puede buscar comandos en algunos lugares adicionales. Por ejemplo, en Windows XP/más reciente puedes ejecutar:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
Si el comando que desea ejecutar aparece en "Rutas de aplicaciones", Windows puede encontrar el programa incluso si no está en la ruta. Por lo tanto, es probable que Windows encuentre incluso MÁS de lo que CMD encontraría en la RUTA que utiliza CMD.
Un posible beneficio es si desea que se ejecute CMD para poder hacer referencia a una variable de entorno como %USERPROFILE% o %LOGONSERVER% o %TEMP%/%TMP%, pero como no está haciendo eso, no está necesitando ejecutar " CMD /C
".
Entonces, para su caso particular: no hay una buena razón para hacerlo. Los efectos que está logrando son que su computadora haga más trabajo, ralentice el proceso y use más memoria (todo lo cual está haciendo en cantidades insignificantes en equipos modernos).
Respuesta2
Porque elimina el colorante.
Puede ser que piensen que a la gente le distrae el fondo azul.
Respuesta3
Con cmd powershell
, le pide al shell actual, el explorador, que invoque cmd con parámetros powershell, "imageSeqView ..."
con un valor analizado de %1 a cmd.
En este caso, "powershell"
cmd espera que sea un comando cmd, un exe o uno de los scripts compatibles con cmd, por ejemplo, bat.
Con powershell "imageSeqView ..."
, le pide al shell actual, el explorador, que invoque powershell
con parámetros imageSeqView ...
con un valor analizado de %1 en powershell.
En este caso, imageSeqView
PowerShell espera que " " sea un cmdlet, un exe o un script de PowerShell.
Siempre que " imageSeqView
" sea una función de PowerShell, la primera forma es completamente innecesaria y reduce ligeramente el rendimiento.
Para las opciones de la ventana de comandos, existen opciones similares en PowerShell, como -NoExit, que debería ser igual que /K en cmd.
Para la canalización e inicialización de variables env, powershell puede hacer lo mismo.