EXE 또는 BAT 파일의 실제 경로를 어떻게 찾을 수 있나요?

EXE 또는 BAT 파일의 실제 경로를 어떻게 찾을 수 있나요?

길고 관련된 PATH가 있고 일부 명령의 이름을 입력하는 경우 EXE 또는 BAT 파일이 실제로 어디에 있는지 어떻게 알 수 있습니까? TRUENAME이 이 작업을 수행했다고 생각했지만 XP에서는 사라졌으며 정확히 내가 원하는 작업을 수행했는지 잘 모르겠습니다.

그래서 나는 타이핑을 할 수 있기를 원합니다.

WHEREIS "Obscure Tool.exe"

그리고 나는 다음을 얻습니다:

C:\Program Files\Obscure Tools Limited\Obscure Tool\Obscure Tool.exe

폴더가 C:\Program Files\Obscure Tools Limited\Obscure Tool\내 경로에 있을 때. WHEREIS는 무엇입니까, 아니면 배치 파일로 수행할 수 있습니까?

답변1

다음은 파일 경로를 검색하는 Windows 배치 파일입니다. XP와 Win7에서 테스트했습니다.

문자열 조작은 고통스러울 정도로 느리기 때문에 배치/명령 파일은 이 문제에 대한 좋은 해결책이 아니라는 점을 이해하십시오. 그러나 컴파일된 도구 대신에 이것이 원하는 작업을 수행할 것입니다.

충분히 설명이 되었기를 바라지만, 설명이 필요한 사항이 있으면 언제든지 질문해 주세요.

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION

rem -- SRC = Search value. Eg. notepad  or  notepad.exe
rem -- PAT = A copy of the path
rem -- SEP = PATH seperator
rem -- EXE = Executable file extensions
SET TMP_SRC=%1
SET TMP_PAT=%PATH%
SET TMP_SEP=;
SET TMP_EXE=exe com bat cmd

rem -- This is a batch file ...they are s-l-o-w
rem -- "<nul set /p=" does "echo" without a newline
<nul set /p =Searching...

:strLoop
    rem -- SUB = The first entry in the current PATH
    for /f "delims=%TMP_SEP%" %%s in ("!TMP_PAT!") do set TMP_SUB=%%s

    rem -- Progress update
    <nul set /p =.

    rem -- Check for the file exactly as specified on the command line
    if exist "!TMP_SUB!\%TMP_SRC%" (
        echo.
        echo Found "!TMP_SUB!\%TMP_SRC%"
        goto strDone
    )

    rem -- Check for the file with each of the selected executable extensions
    for %%x in (%TMP_EXE%) do (
        if exist "!TMP_SUB!\%TMP_SRC%.%%x" (
            echo.
            echo Found "!TMP_SUB!\%TMP_SRC%.%%x"
            goto strDone
        )
    )

    rem -- This loop chops off the first entry of the PATH
:subLoop
    rem -- CHR = First character of current PATH
    rem -- PAT -> All but the first character of the current PATH
    set TMP_CHR=!TMP_PAT:~0,1!
    set TMP_PAT=!TMP_PAT:~1!

    rem -- Have we exhausted the PATH?
    if "!TMP_PAT!" EQU "" goto strDone

    rem -- Have we just removed a PATH seperator?
    if "!TMP_CHR!" EQU "%TMP_SEP%" goto strLoop

    rem -- Keep stripping characters
    goto subLoop
:strDone

rem -- Cleanup
SET TMP_SRC=
SET TMP_PAT=
SET TMP_SEP=
SET TMP_SUB=
SET TMP_CHR=
SET TMP_EXE=

ENDLOCAL

답변2

그것은 모두 실행 중인 명령 해석기에 따라 다르며 모든 경우에 이 작업을 올바르게 수행할 외부 유틸리티는 없습니다. 이는 매우 중요한 이유입니다.

다양한 명령 해석기는 다양한 방식으로 명령을 찾습니다.
각 개별 명령 해석기에 내장된 명령만이 특정 명령 이름에 의해 호출되는 내용을 진정으로 알 수 있습니다.

  • 을 위한JP소프트웨어의 TCC, 간단히 사용내장 which명령. 이는 TCC의 별칭, 실행 가능한 확장자 및 경로 검색 알고리즘을 이해합니다.
    [c:\]mspaint 디렉토리
    mspaint는 외부입니다: C:\Windows\system32\mspaint.exe
    dir은 내부 명령입니다.
    [씨:\]
  • Korn 쉘의 경우 ksh,에서 사용 가능한SFUA 유틸리티 툴킷(에서 실행되는UNIX 기반 애플리케이션을 위한 하위 시스템Windows 7 Ultimate Edition 및 Windows Server 2008 R2와 함께 상자에 바로 포함되어 있음) 사용내장 whence명령. 이는 Korn 쉘의 별칭, 기능, 내장 명령 등을 이해합니다.
    $ 언제 -v ls
    ls는 /bin/ls에 대해 추적된 별칭입니다.
    $
  • Bourne-Again 쉘의 경우 bash,~처럼Unix 응용 프로그램용 서비스에 사용 가능Cygwin과 마찬가지로 내장 type명령을 사용하십시오. 이는 Boune-Again 쉘의 별칭, 기능, 내장 명령 등을 이해합니다.
    $ 유형 '['
    [ 쉘이 내장되어 있습니다.
    $
  • Microsoft의 명령 해석기의 경우 cmd,당신은 운이 좋지 않습니다. 이 작업을 수행하기 위한 기본 제공 명령은 없습니다. 그리고 비록 고용할 수는 있지만외부경로 검색 알고리즘을 복제하는 명령은 별칭과 내장 명령을 반드시(또는 일반적으로) 인식하지 않습니다. 예: 다음은 GnuWin32 which명령 입니다.실패인식하려면 dir(위의 TCC 내장 which명령과 대조):
    C:\>어느 디렉토리
    즉, (.;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem)에 디렉터리가 없습니다.
    씨:\>
    그리고 아래 where에 언급된 명령 은 grawity정확히 같은 방식으로 실패합니다.
    C:\>디렉토리 위치
    정보: 해당 패턴에 대한 파일을 찾을 수 없습니다.
    씨:\>

답변3

당신이 가지고 있다면GnuWin32그것은 다음과 같이 간단합니다:

which ObscureTool.exe

더 좋은 점은 이름만으로 호출하는 경우("ObscureTool"과 같은 확장자 없이) 여전히 올바른 것을 찾을 수 있다는 것입니다. 다음과 같은 경우 문제가 될 수 있습니다."실행 가능" 파일: "ObscureTool.exe" 및 "ObscureTool.bat". 이 경우,어느발생하는 것을 찾을 것입니다첫 번째경로에서. 이 경우에는 ""라고만 말하면 됩니다.

which ObscureTool

답변4

powershell을 사용하면 다음을 사용할 수 있습니다.Get-Command tool.exe

관련 정보