Agregué mi primer menú contextual usando el registro según las instrucciones dadas en esta pregunta (sí, yo).
Originalmente utilicé 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, lo importo en mi perfil de PowerShell. Funciona bien, pero me pregunto: ¿por qué usar cmd
para abrir Powershell
para ejecutar la función? ¿No sería más simple simplemente hacer
Powershell "imageSeqView --% \"%1\""
Ese comando parece funcionar bien, pero dado que parece canónico de usar cmd
, me pregunto si está matando secretamente cachorros o algo así.
cmd /c
...cmd /k
es bastante diferente, ya que deja la ventana abierta después de que se completa el comando. Presumiblemente, el autor de la pregunta lo hizo de esa manera para que pudieran ver la salida con fines de depuración.cmd
que hace, lo que parece ser omnipresente en mi investigación.cmd /c powershell
específicamente? Nuevamente, el que vinculó no hace tal recomendación.Respuestas:
No hay una buena razón para hacer esto. De hecho, el único efecto real que ocurre es 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:
DIR
"Sin embargo, en este caso, ninguno de esos beneficios se obtiene. Echemos un vistazo a estos dos escenarios:
Por lo tanto, puede haber, en algunos casos, un momento en que usar "
CMD /C
" sea útil. Por ejemplo, si uso el comando externoPSEXEC
(descargado de SysInternals) e intento ejecutar "DIR
" en una computadora remota, Windows intentará ejecutar elDIR
comando " ". Windows no podrá ejecutar ese comando ya que no hay un 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
", eso funcionará, porque Windows buscará un ejecutable llamado "CMD
", y lo encontrará, y luegoCMD
terminará ejecutando con éxito elDIR
comando " " que es un comando interno parte delCMD
comando " ".En este caso, puede ejecutarlo
powershell
tan fácilmente como "CMD /C powershell
", por lo que no obtendrá ningún beneficio de lo innecesario "CMD /C
". El único beneficio que estoy viendo al pasar por 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 ser útil para algunas personas. Realmente no es necesario cuando las personas saben lo que están haciendo.En cuanto al segundo punto que proporcioné, que es establecer variables de entorno, eso también es algo que no está haciendo activamente en este caso particular. Tal vez algunas personas piensan que están ayudando al hacer que se establezca 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 puede ejecutar:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
Si el comando que desea ejecutar aparece en "Rutas de aplicación", Windows puede encontrar el programa incluso si no está en la ruta. Por lo tanto, es probable que Windows encuentre incluso MÁS que solo lo que CMD encontraría en la RUTA que utiliza CMD.
Un beneficio posible es si desea que se ejecute CMD para que pueda referirse a una variable de entorno como% USERPROFILE% o% LOGONSERVER% o% TEMP% /% TMP%, pero como no está haciendo eso, no está necesitando correr "
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 que está haciendo con cantidades insignificantes en los equipos modernos).
fuente
cmd /c
. Algo así comocmd /c start /low Notepad.exe
.pbrush
es una ruta de aplicación paramspaint
y no funcionará en muchos lugares).REG_EXPAND_SZ
puede expandir las variables de entorno (usando el mismo%syntax%
) sin invocar cmd. Los verbos utilizados en las asociaciones de archivos se invocan a través deShellExecuteEx
, por lo que las rutas de aplicación se aplican aquí.Porque se deshace de la coloración.
Puede ser que piensen que las personas encuentran que el fondo azul les distrae.
fuente
Con
cmd powershell
, le pide al shell actual, explorador, que invoque cmd con parámetrospowershell, "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, explorador, que invoquepowershell
con parámetrosimageSeqView ...
con un valor analizado de% 1 a powershell.En este caso, "
imageSeqView
" se espera que powershell 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 disminuye ligeramente el rendimiento.Para las opciones de la ventana de comandos, hay opciones similares en powershell como -NoExit, que debería ser lo mismo que / K en cmd.
Para el revestimiento de tuberías, inicializando entornos, PowerShell puede hacer lo mismo.
fuente