EDIT: Eu deveria ter adicionado, se você não pode usar o comando ONDE do prompt de comando, verifique sua variável PATH. (Basta usar o comando “path”.) Certifique-se que o C:\Windows\System32 está no seu caminho. É aí que se encontra “where.exe”.
WHERE é o comando que procura! WHERE é como uma cruz entre a shell UNIX embutida no comando “which” e o comando “locate”, na medida em que funciona tanto para executáveis de comandos como para ficheiros normais.
Também é um pouco mais complexo do que qualquer um desses dois, embora, em geral um simples
WHERE <file>
funcione.
É diferente do comando “locate” na medida em que não está a procurar em todo o sistema de ficheiros. Em vez disso, o comportamento padrão é procurar ficheiros em dois locais:
- O directório actual.
- Todos os directórios na variável PATH.
Assim, qualquer comando que possa correr directamente de um prompt de comando sem especificar o directório, será encontrado pelo comando ONDE. (Porque qualquer comando como esse já está na lista de variáveis PATH.)
Se quiser pesquisar somente na variável caminho de comando, pode usar:
WHERE "$path:<search text>"
Se, por outro lado, quiser encontrar todas as cópias de um ficheiro numa árvore de directórios, pode usar:
WHERE /R <Top Level Directory> <search text>
Finalmente, ONDE encontrará comandos e quaisquer ficheiros com uma extensão da variável PATHEXT sem incluir a extensão. Todos os outros ficheiros têm de ser especificados exactamente ou com wildcards.
Tome por exemplo os ficheiros “dxdiag.exe” e “dxdiagn.dll”. Note o seguinte comando e a sua saída:
WHERE /R C:\Windows dxdiag
C:\Windows\System32\dxdiag.exe
C:\Windows\SysWOW64\dxdiag.exe
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiag.exe
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiag.exe
Ele consegue devolver todas as versões de “dxdiag.exe” porque “.exe” é uma das extensões da variável PATHEXT. (Nota: “ONDE dxdiag” também teria funcionado, porque C:\Windows\System32 está na variável PATH.)
WHERE /R C:\Windows dxdiagn
, por outro lado, não devolve nenhum resultado, porque “.dll” é não no PATHEXT.
Neste caso, veja o resultado que a adição de um wildcard nos dá:
WHERE /R C:\Windows dxdiagn*
C:\Windows\System32\dxdiagn.dll
C:\Windows\System32\en-US\dxdiagn.dll.mui
C:\Windows\SysWOW64\dxdiagn.dll
C:\Windows\SysWOW64\en-US\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_daccd04369b09c70\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiagn.dll
C:\Windows\WinSxS\x86_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_7eae34bfb1532b3a\dxdiagn.dll.mui
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiagn.dll
Ele retorna com sucesso todas as versões da dxdiagn.dll.
Para mais informações, use “ONDE /?”. Espero que isto ajude!