Eu tentei o seguinte experimento.
Antes de começar, verifiquei a variável PATH no cmd, que possui o seguinte valor:
Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\ProgramData\Lenovo\ReadyApps;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Skype\Phone\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Calibre2\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;
No começo, pensei que o cmd procurava apenas executáveis nos diretórios contidos na variável PATH, então escolhi aleatoriamente um aplicativo - winword.exe (Microsoft Word) e tentei iniciá-lo na linha de comando:
start winword
Mas, para minha surpresa, o programa é lançado! A razão pela qual estou surpreso é porque procurei em todos os diretórios da variável PATH o arquivo exe chamado 'winword', mas todas as minhas pesquisas ficaram vazias!
Concluí, portanto, que o prompt de comando deve saber pesquisar em locais diferentes daqueles especificados na variável PATH para procurar executáveis.
Então, obviamente, a próxima coisa que fiz foi procurar o local exato em que o arquivo executável 'winword' está localizado. Acontece que o winword.exe está localizado aqui:
C:\Program Files\Microsoft Office 15\root\office15
Portanto, dando-me a ideia de que talvez o CMD procure automaticamente através de ProgramFiles e ProgramFiles (x86) (e todos os subdiretórios) ao executar o comando 'start'? O que me levou a tentar iniciar outro aplicativo instalado no meu computador, o Audacity, com o arquivo exe localizado em:
C:\Program Files (x86)\Audacity
Mais uma vez, para minha surpresa, o Audacity não foi iniciado quando digitei:
start audacity
na linha de comando.
Adicionei o diretório que contém o audacity.exe ao PATH:
set path=%path%;C:\Program Files (x86)\Audacity
Depois disso, tentei iniciar o Audacity novamente:
start audacity
Bem, não surpreendentemente, o Audacity foi lançado.
O que eu quero saber é onde exatamente o prompt de comando procura por executáveis? Por que o winword.exe é iniciado mesmo quando o diretório que o contém não faz parte do PATH, mas o mesmo não se aplica ao audacity.exe?
Eu tentei outras aplicações também. Chrome e Firefox funcionam quando eu uso o comando start.
ATUALIZAÇÃO: Estou executando o Windows versão 6.3.9600 (Windows 8.1)
Respostas:
O motivo
winword.exe
foi que existe uma chave do Registro que define o caminho para o Microsoft Word (Winword.exe). Uma chave semelhante existe para Firefox.exe e Chrome.exe se esses aplicativos estiverem instalados.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
Variável PATH do sistema, Variável PATH do usuário e as várias chaves
..\App Paths
. Pude confirmar que o Audacity não cria uma chave para si quando está instalado.Fonte: Registro do Aplicativo
fonte
No prompt de comando, se você apenas digitar,
WinWord
ele não será executado.Se você digitar,
START WinWord
ele será executado.O
Start
comando é a chave aqui.Quando você tenta executar um arquivo através do comando start, o Prompt de Comando não realiza nenhuma pesquisa. Em vez disso, ele passa o nome do arquivo (e os argumentos) para o próprio Windows (por meio da chamada da API ShellExecuteEx), que deve procurar o local do arquivo. Existem vários locais que ele pesquisa na seguinte ordem:
O diretório de trabalho atual.
O
Windows
diretório somente (não subdiretórios são pesquisados).O
Windows\System32
diretórioDiretórios listados na
PATH
variável de ambiente.Recomendado:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
WinWord
está nessa chave do registro. A chave está lá para nãoPATH
ficar muito tempo.fonte
O programa (quando você especifica o nome do módulo sem unidade / caminho no prompt de comando) no processador de comandos do Windows (CMD.EXE) pode ser iniciado quando encontrado:
pela variável de ambiente PATH (tanto executável quanto seu hardlink / softlink / atalho com o mesmo nome)
por DOSKEY alias
pelo caminho do aplicativo de
HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths
ouHKCU\Software\Microsoft\Windows\CurrentVersion\App Paths
(ao usar ostart
comando)Usando esse conhecimento (especialmente o último), você pode criar seus próprios aliases convenientes para você. Por exemplo, você pode criar
HKCU\Software\Microsoft\Windows\CurrentVersion\App Paths\au.exe
com o valor padrão deC:\Program Files (x86)\Audacity\Audacity.exe
e iniciar esse aplicativo simplesmente digitandostart au
no prompt de comando.fonte
Embora as outras respostas provavelmente sejam o motivo específico do seu caso, também há outra resposta à sua pergunta, que poderia ter sido o caso de alguns outros aplicativos: no mesmo lugar que você estava procurando, mas com extensões de arquivo diferentes.
Você disse especificamente que estava procurando arquivos com extensão
exe
. O Windows também tentará executar arquivos de outras extensões.Outra variável de ambiente que entra em jogo ao executar um comando é a variável
PATHEXT
. Esta é uma;
lista delimitada de extensões de arquivo para tentar executar. Se você ecoar,PATHEXT
poderá ver algo como.COM;.EXE;.BAT;.CMD;.VBS;
... (etc.). Alguns aplicativos usam esses outros tipos de arquivos como ponto de entrada do usuário final. É muito menos comum, mas acontece. Eu usei vários produtos comerciais importantes que começam com.BAT
scripts. Para usar um deles como exemplo, eu posso iniciá-lo com o comandostandalone
mesmo que não existastandalone.exe
... em vez disso, ele possui astandalone.bat
.Algumas das extensões que tenho no
PATHEXT
momento, nunca tive o uso de um aplicativo. Os que eu ter executado em muito mais frequentemente (mas, obviamente, não tanto quantoexe
) são:.com
,.bat
,.vbs
,.js
,.jar
. Os dois primeiros são arquivos de script em lote do Windows e os outros três são tipos de arquivos para linguagens de programação específicas executadas a partir de scripts ou máquinas virtuais em vez deexe
s (respectivamente: visual basic, javascript e java).fonte
PATHEXT
ePATH
, ambos estão relacionados a fazer as coisas funcionarem, eles são um tanto ortogonais em suas respectivas tarefas.PATH
especifica onde procurar as coisas a serem executadas e é o que o OP estava perguntando, enquantoPATHEXT
especifica o que pode ser executado.start winword
não diz ao prompt de comando para iniciarwinword
. Diz ao prompt de comando para iniciarstart
com argumentowinword
.Start
usa seus próprios métodos para encontrarwinword
.Apenas
winword
informa ao prompt de comando para iniciarwinword
. E se você tentar isso, já quewinword
não está noPATH
, ele não será iniciado.fonte