Como às vezes tenho problemas de caminho, onde um dos meus próprios scripts cmd está oculto (sombreado) por outro programa (anteriormente no caminho), eu gostaria de encontrar o caminho completo para um programa na linha de comando do Windows, considerando apenas o seu nome.
Existe um equivalente ao comando UNIX 'what'?
No UNIX, which command
imprime o caminho completo do comando fornecido para localizar e reparar facilmente esses problemas de sombreamento.
which
comando no Unix padrão. O utilitário POSIX étype
. O C Shell possui um comando which, e alguns sistemas o possuem como um executável externo. Por exemplo, no Debian Linux,which
vem de um pacote chamadodebutils
. Este externowhich
não "vê" built-ins, aliases ou funções do shell.type
faz; O Bash'stype
tem uma opção para suprimir isso e apenas fazer uma pesquisa de caminho.Respostas:
O Windows Server 2003 e posterior (ou seja, qualquer coisa após o Windows XP 32 bits) fornece o
where.exe
programa que faz parte do quewhich
faz, embora corresponda a todos os tipos de arquivos, não apenas aos comandos executáveis. (Ele não corresponde aos comandos internos do shell, comocd
.) Ele aceita até curingas, portanto,where nt*
encontra todos os arquivos no%PATH%
diretório atual e cujos nomes começam comnt
.Tente
where /?
ajuda.Observe que o Windows PowerShell define
where
como um alias para oWhere-Object
cmdlet ; portanto, se você quiserwhere.exe
, digite o nome completo em vez de omitir a.exe
extensão.fonte
where.exe
não é um shell embutido, você precisa ter%windir%\system32
no seu%PATH%
- o que pode não ser o caso, pois o usowhere
sugere que você pode estar trabalhando em problemas no seu caminho!Embora as versões posteriores do Windows tenham um
where
comando, você também pode fazer isso no Windows XP usando os modificadores de variáveis de ambiente, da seguinte maneira:Você não precisa de ferramentas extras e isso não se limita,
PATH
pois você pode substituir qualquer variável de ambiente (no formato do caminho, é claro) que deseja usar.E, se você quiser um que possa lidar com todas as extensões no PATHEXT (como o próprio Windows), este fará o truque:
Na verdade, ele retorna todas as possibilidades, mas você pode ajustá-lo facilmente para regras de pesquisa específicas.
fonte
which
retorno nos dias do W95 / DOS, a ordem de pesquisa foi - dir atual, depois cada diretório de caminho, para cmd.com, cmd.exe e cmd.bat Então, cmd.bat no dir atual é executado befroe cmd.exe em outro lugar no caminho@echo off for %%i in (%1) do @echo. %%~$PATH:%i
Para adicioná-lo a um script alias.bat carregado toda vez que você executa o cmd.exe (coloque o script acima em um novo diretório chamado C: \ usr \ aliases):DOSKEY which=C:\usr\aliases\which.bat $*
Em seguida, você pode criar um script para iniciar o cmd.exe com o arquivo alias.bat:cmd.exe /K E:\usr\aliases\alias.bat
No PowerShell,
Get-Command
encontrará executáveis em qualquer lugar$Env:PATH
.Também encontra cmdlets PowerShell, funções, aliases, arquivos com executáveis personalizados extensões via
$Env:PATHEXT
, etc. definidos para o shell atual (bastante semelhante ao Bash detype -a foo
) - tornando-se uma melhor go-to que outras ferramentas comowhere.exe
,which.exe
, etc, que não têm conhecimento destes Comandos do PowerShell.Localizando executáveis usando apenas parte do nome
Localizando Executáveis Customizados
Para encontrar outros executáveis que não sejam do Windows (python, ruby, perl, etc), as extensões de arquivo desses executáveis precisam ser adicionadas à
PATHEXT
variável de ambiente (o padrão é.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
) para identificar os arquivos com essas extensões noPATH
executável. ComoGet-Command
também honra essa variável, ela pode ser estendida para listar executáveis personalizados. por exemploVocê pode configurar rapidamente um alias com
sal which gcm
(forma abreviada deset-alias which get-command
).Mais informações e exemplos podem ser encontrados na ajuda online de
Get-Command
.fonte
.BAT
,.CMD
etc), eles são considerados executáveis porque suas extensões são nomeadas naPATHEXT
variável (que por padrão éPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
). Outros tipos de executáveis (por exemplo.py
,.rb
etc) podem ser adicionados adicionando a extensão do arquivo e criando uma associação executável comassoc
/ftype
- por exemplo, docs.python.org/3.3/using/…No Windows PowerShell:
fonte
Se você possui o PowerShell instalado (o que eu recomendo), você pode usar o seguinte comando como um equivalente aproximado (substituir programName pelo nome do seu executável):
Mais está aqui: My Manwich! PowerShell Quais
fonte
($Env:Path).Split(";") | Get-ChildItem -filter programName*
é tão fácil de escrever ... ;-)As ferramentas GnuWin32 têm
which
, junto com uma série de outras ferramentas Unix.fonte
Nas
which
chamadas do Windows CMDwhere
:fonte
Cygwin é uma solução. Se você não se importa em usar uma solução de terceiros, o Cygwin é o caminho a seguir.
O Cygwin oferece o conforto do * nix no ambiente Windows (e você pode usá-lo no shell de comando do Windows ou no shell * nix de sua escolha). Ele fornece a você uma série de comandos * nix (como
which
) para Windows, e você pode apenas incluir esse diretório no seuPATH
.fonte
No PowerShell, ele
gcm
fornece informações formatadas sobre outros comandos. Se você deseja recuperar apenas o caminho do executável, use.Source
.Por exemplo:
gcm git
ou(gcm git).Source
Petiscos:
gcm
é um alias doGet-Command
cmdlet .Set-Alias which gcm
e usá-lo como:(which git).Source
.fonte
Eu tenho uma função no meu perfil do PowerShell chamada 'what'
Aqui está a aparência da saída:
fonte
> get-command app.exe | format-list
funcionou perfeitamente!Acesse unxutils aqui: http://sourceforge.net/projects/unxutils/
ouro nas plataformas Windows, coloca todos os utilitários unix em um DOS padrão do Windows. Utilizado há anos.
Tem um 'que' incluído. Note que é sensível a maiúsculas.
Nota: para instalá-lo, exploda o zip em algum lugar e adicione ... \ UnxUtils \ usr \ local \ wbin \ à variável env do caminho do sistema.
fonte
.
para the \ r. É uma solução de 99%, com certeza!Não em estoque Windows, mas ele é fornecido pelo Services for Unix e há vários scripts simples em lote por aí que realizar a mesma coisa tão presente este .
fonte
Se você pode encontrar um compilador Pascal gratuito, é possível compilá-lo. Pelo menos funciona e mostra o algoritmo necessário.
fonte
my_funk;
é necessária. Obrigado por postar um programa em Pascal, me lembra minha juventude! É uma pena que Pascal não tenha evoluído.A melhor versão disso que encontrei no Windows é o utilitário "whereis", de Joseph Newcomer, que está disponível (com a fonte) em seu site .
Vale a pena ler o artigo sobre o desenvolvimento de "whereis".
fonte
Você pode instalar o Git primeiro a partir do Download Git e, em seguida, abra o Git Bash e digite:
fonte
Nenhuma das portas Win32 do Unix que eu encontrei na Internet é satistatória, porque todas elas têm uma ou mais dessas deficiências:
Então, eu finalmente escrevi o meu próprio que, que suporta tudo acima corretamente.
Disponível lá: http://jf.larvoire.free.fr/progs/which.exe
fonte
Esse arquivo em lote usa a manipulação de variáveis CMD para encontrar o comando que seria executado no caminho. Nota: que o diretório atual é sempre feito antes do caminho) e, dependendo de qual chamada da API é usada, outros locais são pesquisados antes / depois do caminho.
Veja
set /?
para ajuda.fonte
Estou usando o GOW (GNU no Windows), que é uma versão light do Cygwin. Você pode obtê-lo no GitHub aqui .
Uma captura de tela de uma lista de comandos incluídos no GOW:
fonte
Eu criei uma ferramenta semelhante ao Ned Batchelder:
Pesquisando arquivos .dll e .exe no PATH
Embora minha ferramenta seja principalmente para pesquisar várias versões de dll, ela mostra mais informações (data, tamanho, versão), mas não usa PATHEXT (espero atualizar minha ferramenta em breve).
fonte
Apenas é necessário postar o arquivo em lotes de liner deste Windows:
Um teste:
Não é uma linha única, se você incluir o código em
setlocal enableextensions
eendlocal
.fonte
Para você, usuários do Windows XP (que não possuem
where
comando interno), escrevi um comando "where like" como um rubygem chamadowhichr
.Para instalá-lo, instale o Ruby.
Então
Execute-o como:
C:> qual cmd_aqui
fonte
TCC e TCC / LE da JPSoft são substituições do CMD.EXE que adicionam funcionalidade significativa. Relevante à pergunta do OP,
which
há um comando interno para os processadores de comando da família TCC.fonte
Eu uso o
which
módulo da npm há um bom tempo e funciona muito bem: https://www.npmjs.com/package/which É uma ótima alternativa multiplataforma.Agora mudei para o
which
que vem com o Git. Basta adicionar ao seu caminho o/usr/bin
caminho do Git, que geralmente está emC:\Program Files\Git\usr\bin\which.exe
. Owhich
binário estará emC:\Program Files\Git\usr\bin\which.exe
. É mais rápido e também funciona como esperado.fonte
tente isso
fonte