Eu adicionei meu primeiro menu de contexto usando o registro conforme as instruções fornecidas nesta pergunta (yay me).
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, importo-a no meu perfil do PowerShell. Funciona bem, mas estou me perguntando: por que usar cmd
para abrir Powershell
para executar a função? Não seria mais simples fazer
Powershell "imageSeqView --% \"%1\""
Esse comando parece funcionar muito bem, mas, como parece canônico, cmd
pergunto-me se está matando secretamente filhotes ou algo assim?
cmd /c
...cmd /k
é bastante diferente, pois deixa a janela aberta após a conclusão do comando. Presumivelmente, o solicitante fez dessa maneira para que eles pudessem ver a saída para fins de depuração.cmd
todos, o que parece onipresente em minha pesquisa.cmd /c powershell
especificamente? Novamente, o que você vinculou não faz essa recomendação.Respostas:
Não há uma boa razão para fazer isso. De fato, 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:
DIR
"No entanto, nesse caso, nenhum desses benefícios é obtido. Vejamos esses dois cenários:
Portanto, em alguns casos, pode haver um tempo em que usar "
CMD /C
" é útil. Por exemplo, se eu usar o comando externoPSEXEC
(baixado do SysInternals) e tentar executar "DIR
" em um computador remoto, o Windows tentará executar oDIR
comando " ". O Windows falhará ao executar esse comando, pois não há arquivo "DIR.EXE
", "DIR.BAT
" ou "DIR
" que termine com outra extensão suportada. (As extensões suportadas podem ser vistas executando "ECHO %PATHEXT%
".)No entanto, nesse cenário, se eu tentar executar "
CMD /C DIR
", isso funcionará, porque o Windows procurará um executável chamado "CMD
" e descobrirá isso, eCMD
acabará executando com êxito oDIR
comando " " que é interno parte doCMD
comando " ".Nesse caso, você pode executar
powershell
tão facilmente quanto "CMD /C powershell
", para que você não se beneficie do desnecessário "CMD /C
". O único benefício que estou vendo na etapa extra de digitar "CMD /C
" é fornecer um exemplo que será útil se alguém decidir 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 as coisas, fazendo com que a variável de ambiente PATH seja definida. 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 do aplicativo", o Windows poderá encontrar o programa mesmo que não esteja no caminho. Portanto, é provável que o Windows encontre MUITO MAIS do que o que o CMD encontraria no PATH que o CMD usa.
Um benefício possível é se você deseja que o CMD seja executado para que você possa se referir a uma variável de ambiente como% USERPROFILE% ou% LOGONSERVER% ou% TEMP% /% TMP%, mas como você não está fazendo isso, não está precisando executar "
CMD /C
".Portanto, para o seu caso em particular: não há uma boa razão para fazê-lo. Os efeitos que você está conseguindo são fazer com que seu computador faça mais trabalho, diminuindo a velocidade do processo e usando mais memória (tudo o que você está fazendo em quantidades insignificantes em equipamentos modernos).
fonte
cmd /c
. Algo comocmd /c start /low Notepad.exe
.pbrush
é um App Pathmspaint
e não funcionará no muitos lugares).REG_EXPAND_SZ
poderá expandir variáveis de ambiente (usando o mesmo%syntax%
) sem chamar o cmd. Os verbos usados nas associações de arquivos são chamados viaShellExecuteEx
, portanto, os Caminhos de Aplicativo se aplicam aqui.Porque se livra da coloração.
Pode ser que eles achem que as pessoas acham o fundo azul perturbador.
fonte
Com
cmd powershell
, você solicita ao shell atual, explorer, que invoque o cmd com parâmetrospowershell, "imageSeqView ..."
com valor analisado de% 1 a cmd.Nesse caso,
"powershell"
espera-se que o cmd seja um comando do cmd, um exe ou um dos scripts suportados do cmd, por exemplo, bat.Com
powershell "imageSeqView ..."
, você solicita ao shell atual, explorer, que invoquepowershell
com parâmetrosimageSeqView ...
com valor analisado% 1 para o PowerShell.Nesse caso, "
imageSeqView
" espera-se que o powershell seja um script de cmdlet, exe ou powershell.Desde que "
imageSeqView
" seja uma função do PowerShell, a primeira maneira é completamente desnecessária e diminui um pouco o desempenho.Para opções da janela de comando, existem opções semelhantes no PowerShell, como -NoExit, que devem ser iguais a / K no cmd.
Para revestimento de tubos, inicializando env vars, o PowerShell pode fazer o mesmo.
fonte