Descubra qual aplicativo está sendo executado quando iniciado a partir do prompt de comando do Windows

0

Devido ao número de diretórios que você pode colocar em sua variável de ambiente% PATH%, é muito fácil ter conflitos não intencionais entre os nomes dos aplicativos. Eu jurei que encontrei essa dica antes, mas não consigo localizá-la em lugar nenhum. Existe caminho no prompt de comando para ver o diretório onde o aplicativo está localizado? Por exemplo, estou procurando algo como o seguinte:

C:\> xcopy
Invalid number of parameters
0 File(s) copied

C:\> **SOME_COMMAND** xcopy
C:\Windows\System32\xcopy.exe
    
por Agent_9191 30.11.2009 / 16:46

5 respostas

1

Um pouco pesado, mas se você gosta da linha de comando no Windows, você deve isso a si mesmo para tentar Cygwin . Coloque a pasta \ bin no seu PATH e você terá uma grande quantidade de ótimas ferramentas, incluindo which , que lhe dirá exatamente qual arquivo você estaria executando:)

(E sim, eu percebo a ironia de adicionar ao seu PATH para ajudar a ter muito lá)

editar: Isso também pode ser apropriado.

    
por 30.11.2009 / 17:11
4

Where.exe é o equivalente do Windows whereis em unices. Se você estiver usando o Windows Server 2003+ ou o Vista +, essa ferramenta será instalada em% windir% / System32. Usando "where" no shell de comando (cmd.exe) mostra os resultados na ordem de pesquisa do caminho:

C:\> where where
C:\Windows\System32\where.exe

Lembre-se de que o PowerShell geralmente alias 'where' a Where-Object, portanto, basta incluir '.exe' ao chamar onde do PowerShell:

C:\> where.exe where
C:\Windows\System32\where.exe

Veja também o equivalente Windows de whereis?

    
por 04.09.2012 / 18:13
2

Aqui está um arquivo de banho simples que fará o que você quiser.

@for %%e in (%PATHEXT%) do @for %%i in (%1%%e) do @if NOT "%%~$PATH:i"=="" echo %%~$PATH:i

whereis xcopy - obras whereis xcopy.exe - não funcionará

Espero que ajude (um pouco)

Atenciosamente

    
por 30.11.2009 / 16:49
1

Com base em Resposta de Mick e Phoshi Eu encontrei a solução que estava procurando. Eu criei um script AutoIt que percorre todos os PATHEXT's e PATHs para encontrar o primeiro local onde o parâmetro passado está localizado. Ele lida com parâmetros sem extensão e com extensão total. Ele procura primeiro o diretório de trabalho local e, em seguida, as variáveis de ambiente. No que diz respeito a tudo o que li, é assim que o Windows executa a procura pelo comando também. Aqui está o script:

If $CmdLine[0] > 0 Then
    $commandToFind = $CmdLine[1]
    $matchFound = false
    $foundPath = ""
    $pathEnvironmentVariable = EnvGet("PATH")
    $pathDirectories = StringSplit($pathEnvironmentVariable, ";", 2)
    $pathExtensionsEnvironmentVariable = EnvGet("PATHEXT")
    $pathExtensions = StringSplit($pathExtensionsEnvironmentVariable, ";", 2)

    ; Search the local directory first for the file
    If FileExists($commandToFind) Then
        $matchFound = true
        $foundPath = @WorkingDir & "\" & $commandToFind
    EndIf

    For $pathExtension In $pathExtensions
        $fullPath = @WorkingDir & "\" & $commandToFind & StringLower($pathExtension)
        If FileExists($fullPath) Then
            $matchFound = true
            $foundPath = $fullPath
            ExitLoop
        EndIF
    Next

    If Not $matchFound == true Then
        ; Loop through all the individual directories located in the PATH environment variable
        For $pathDirectory In $pathDirectories
            If FileExists($pathDirectory) Then
                $pathWithoutExtension = $pathDirectory & "\" & $commandToFind

                ; Check if the command exists in the current path. Most likely the parameter had the extension passed in
                If FileExists($pathWithoutExtension) Then
                    $matchFound = true
                    $foundPath = $pathWithoutExtension
                    ExitLoop
                EndIf

                If Not $matchFound == true Then
                    ; Loop through all possible system extensions to see if the file exists.
                    For $pathExtension In $pathExtensions
                        $fullPath = $pathWithoutExtension & StringLower($pathExtension)
                        If FileExists($fullPath) Then
                            $matchFound = true
                            $foundPath = $fullPath
                            ExitLoop
                        EndIf
                    Next
                EndIf

                If $matchFound == true Then
                    ExitLoop
                EndIf
            EndIf
        Next
    EndIf
    If $matchFound == true Then
        ConsoleWrite("Located at " & $foundPath & @CRLF)
    Else
        ConsoleWriteError("Unable to locate the command" & @CRLF)
    EndIf
EndIf

Para fazê-lo funcionar, você precisa executá-lo através do programa Aut2exe.exe que vem com o AutoIt (atalho é Compile Script to .exe ) e verifique o "Console?" caixa de seleção ao compilá-lo. Eu apenas compilo para um arquivo chamado "which.exe" que eu coloco em um diretório de caminho existente (como C:\Windows\System32 ).

    
por 30.11.2009 / 18:47
1

As ferramentas GNU do UNIX estão disponíveis em portas Windows, você não precisa passar pela dificuldade de criar scripts como acima. O comando which funciona quando recebe xcopy ou xcopy.exe ou outros executáveis, incluindo arquivos BAT. Estes podem ser baixados em:

link

Eles são muito úteis.

    
por 30.11.2009 / 20:38