Adicionei meu primeiro menu de contexto usando o registro conforme as instruções fornecidas emessa questão(sim, eu).
Originalmente usei isso como o comando que ele executa, ou seja, o valor da chave "comando":
Cmd /C Powershell "imageSeqView --% \"%1\""
ImageSeqView
é o nome da minha função do PowerShell, eu importo-a no meu perfil do PowerShell. Funciona bem, mas estou me perguntando: por que usar cmd
to open Powershell
para executar a função? Não seria mais simples simplesmente fazer
Powershell "imageSeqView --% \"%1\""
Esse comando parece funcionar bem, mas como parece canônico de usar, cmd
estou me perguntando: ele está matando filhotes secretamente ou algo assim?
Responder1
Não há uma boa razão para fazer isso. Na verdade, o único efeito real que acontece é desacelerar as coisas.
As pessoas podem pensar que há uma boa razão para fazer isso. O uso do CMD tem os seguintes efeitos que geralmente podem ser bons em alguns casos:
- Habilita comandos internos, como "
DIR
" - Define variáveis de ambiente, como a variável PATH
No entanto, neste caso, nenhum desses benefícios é obtido. Vejamos esses dois cenários:
Portanto, pode haver, em alguns casos, um momento em que usar " CMD /C
" seja útil. Por exemplo, se eu usar o comando externo PSEXEC
(baixado do SysInternals) e tentar executar " DIR
" em um computador remoto, o Windows tentará executar o DIR
comando " ". O Windows não conseguirá executar esse comando porque não há arquivo " DIR.EXE
", " DIR.BAT
" ou " DIR
" terminando com outra extensão suportada. (Extensões suportadas podem ser vistas executando " ECHO %PATHEXT%
".)
No entanto, neste cenário, se eu tentar executar " CMD /C DIR
", então isso funcionará, porque o Windows irá procurar por um executável chamado " CMD
", e irá encontrá-lo, e então CMD
terminará executando com sucesso o DIR
comando " " que é um comando interno parte do CMD
comando " ".
Nesse caso, você pode executar powershell
com a mesma facilidade que " CMD /C powershell
", para não obter nenhum benefício com o " CMD /C
" desnecessário. O único benefício que vejo ao passar pela etapa extra de digitar " CMD /C
" é fornecer um exemplo que será útil se alguém decidir tentar modificar um exemplo para executar uma linha de comando " DIR
" ou " COPY
". Ter um exemplo mais flexível pode ser útil para algumas pessoas. Realmente não é necessário quando as pessoas sabem o que estão fazendo.
Quanto ao segundo ponto que forneci, que é definir variáveis de ambiente, isso também é algo que você não está fazendo ativamente neste caso específico. Talvez algumas pessoas pensem que estão ajudando ao definir a variável de ambiente PATH. No entanto, quando você executa comandos diretamente (por exemplo, na opção de menu “Executar” do menu Iniciar), o sistema operacional Windows pode procurar comandos em alguns locais adicionais. Por exemplo, no Windows XP/mais recente você pode executar:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
Se o comando que você deseja executar estiver listado em "Caminhos de aplicativos", o Windows poderá encontrar o programa mesmo que ele não esteja no caminho. Portanto, é provável que o Windows encontre ainda MAIS do que o CMD encontraria no PATH que o CMD usa.
Um benefício possível é se você deseja que o CMD seja executado para poder se referir a uma variável de ambiente como %USERPROFILE% ou %LOGONSERVER% ou %TEMP%/%TMP%, mas como você não está fazendo isso, você não está precisando executar " CMD /C
".
Portanto, para o seu caso específico: não há um bom motivo para fazer isso. Os efeitos que você está obtendo são fazer com que seu computador trabalhe mais, tornando o processo mais lento e usando mais memória (tudo isso que você está fazendo em quantidades insignificantes em equipamentos modernos).
Responder2
Porque elimina a coloração.
Pode ser que eles pensem que as pessoas acham o fundo azul uma distração.
Responder3
Com cmd powershell
, você pede ao shell atual, o explorer, para invocar cmd com parâmetros powershell, "imageSeqView ..."
com valor analisado de% 1 para cmd.
Neste caso, "powershell"
o cmd espera que seja um comando cmd, um exe ou um dos scripts suportados pelo cmd, por exemplo, bat.
Com powershell "imageSeqView ..."
, você pede ao shell atual, explorer, para invocar powershell
parâmetros imageSeqView ...
com valor analisado de% 1 para o powershell.
Nesse caso, " imageSeqView
" o PowerShell espera que seja um cmdlet, um exe ou um script do PowerShell.
Desde que " imageSeqView
" seja uma função do PowerShell, a 1ª forma é completamente desnecessária e diminui um pouco o desempenho.
Para opções de janela de comando, existem opções semelhantes no PowerShell, como -NoExit, que deve ser igual a /K no cmd.
Para pipe-lining, inicializando env vars, o PowerShell pode fazer o mesmo.