Windows에서 실행 파일의 위치를 ​​찾으려면 어떻게합니까?


154

where콘솔에서 다음과 같은 실행 프로그램의 위치를 ​​찾기 위해 as이라는 도구를 사용했음을 기억했습니다 .

 C:\Tmp\Where myTool.exe
 C:\Program Files\MyApp\myTools.exe
 ....

이제이 도구를 찾을 수 없습니다. Windows에 해당 검색을위한 기본 제공 도구가 있는지 확실하지 않습니까?



응용 프로그램이 실행 중이고 해당 위치를 알아야하는 경우 프로세스 탐색기 (Sys Internals의)를 사용하십시오.
Ganesh R.

6
whereWindows 7 Enterprise에서 나를 위해 일했습니다
Bohemian

4
PAGING OP : 허용 된 답변을 업데이트하십시오 :)
Jake

1
@ David.Chu.ca 허용 답변을 업데이트하십시오
Matt Frear

답변:


351

StackOverflow의 답변에 따르면 Windows에는 '어떤 것'에 해당합니까? , where.exe이것은 Windows 7 및 Windows Server 2003 이상을 수행합니다

C:\> where ping

산출:

C:\Windows\System32\PING.EXE

19
추가 소프트웨어를 설치하지 않고 작동하므로 정답으로 표시해야합니다
Cookie

25
이 답변의 중요한 부분은 PowerShell에서,이다 where에 대한 기본 별칭 Where-Object대신 사용할 필요가 있으므로, where.exe또는 gcm/Get-Command
데이브 앤더슨을

2
powershell은 어떻습니까? powershell에서 어떻게 동일한 결과를 얻을 수 있습니까?
krv

1
@krv @DaveAndersen이 언급했듯이 powershell 에는 다른 정보와 함께 전체 경로를 제공하는 입력 Get-Command ping(또는 그냥 gcm ping) 할 수 있습니다.

22

편집 : 명령 프롬프트에서 WHERE 명령을 사용할 수 없으면 PATH 변수를 확인하십시오. "path"명령 만 사용하십시오. C : \ Windows \ System32가 경로에 있는지 확인하십시오. "where.exe"가있는 위치입니다.

당신이 찾고있는 명령이 어디에 있습니까! WHERE는 명령 실행 파일과 일반 파일 모두에서 작동한다는 점에서 UNIX 쉘 내장 "which"와 "locate"명령의 교차점과 같습니다.

일반적으로 단순하지만, 둘 중 어느 것보다 다소 복잡

WHERE <file>

작동합니다.

"locate"명령과는 달리 전체 파일 시스템을 살펴 보지 않습니다. 대신 기본 동작은 두 위치에서 파일을 찾는 것입니다.

  • 현재 디렉토리
  • PATH 변수의 모든 디렉토리

따라서 디렉토리를 지정하지 않고 명령 프롬프트에서 직접 실행할 수있는 모든 명령은 WHERE 명령으로 찾을 수 있습니다. (이와 같은 명령은 이미 PATH 변수 목록에 있습니다.)

명령 경로 변수 에서만 검색하려는 경우 다음 을 사용할 수 있습니다.

WHERE "$path:<search text>"

반면에 디렉토리 트리에서 파일의 모든 사본을 찾으려면 다음을 사용할 수 있습니다.

WHERE /R <Top Level Directory> <search text>

마지막으로, WHERE는 확장자를 포함하지 않고 PATHEXT 변수에서 확장자가있는 명령 및 파일을 찾습니다. 다른 모든 파일은 정확하게 또는 와일드 카드로 지정해야합니다.

예를 들어 "dxdiag.exe"및 "dxdiagn.dll"파일을 예로들 수 있습니다. 다음 명령 및 해당 출력에 유의하십시오.

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

".exe"는 PATHEXT 변수의 확장 중 하나이므로 모든 버전의 "dxdiag.exe"를 반환하는 데 성공합니다. (참고 : C : \ Windows \ System32가 PATH 변수에 있으므로 "WHERE dxdiag"도 작동했을 것입니다.)

WHERE /R C:\Windows dxdiagn

다른 한편으로는, ".DLL"가 있기 때문에, 어떤 결과를 반환하지 하지 PATHEXT에.

이 경우 와일드 카드를 추가하면 다음과 같은 결과를 얻을 수 있습니다.

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

dxdiagn.dll의 모든 버전을 성공적으로 반환 합니다 .

자세한 내용은 "WHERE /?"를 사용하십시오. 도움이 되었기를 바랍니다!


2
where where C:\Windows\System32\where.exe:)
vp_arth

1
@vp_arth는 정확히 같은 것을 생각하고있었습니다. :)
리버스 엔지니어

10

사용 dir:

cd \
dir /s /b mytool.exe

cd \부분은 계층 구조의 상단에있는 검색 시작을 보장하기 위해, 드라이브의 루트로 변경됩니다.


명령 줄 Windows Search를 수행하는 것 같습니다.
Ganesh R.

5
그것은 드라이브의 재귀 적 검색을 수행하고 영원히 걸릴 것입니다.
djhowell

6
실행 파일을 찾을 수있는 유일한 방법 이 아니며 PATH 환경 변수에이 작업을 수행하는 것입니다. 그는 자신의 경로를 지정하지 않았으며 모든 실행 파일 을 말했습니다 .
John T

실행 파일을 찾지 만 시간이 걸립니다.
Michael Z

이것은 물론 실행 파일 이름 또는 이름의 적어도 일부를 알고있는 경우에만 작동합니다.
Oliver Williams

9

PowerShell의 경우 약간 다를 수 있습니다.

PS C:\Users\Rob.wb-devel> where ping

PS C:\Users\Rob.wb-devel> where git

PS C:\Users\Rob.wb-devel> whereis.bat git
C:\Program Files (x86)\Git\cmd\git.exe

PS C:\Users\Rob.wb-devel> where.exe git
C:\Program Files (x86)\Git\cmd\git.exe

감사합니다. 이것은 cmd와 PowerShell 모두에서 작동합니다.
Ding-Yi Chen

3

간단한 명령으로 내장되어 있지 않다는 것에 실망합니다.

그러나 몇 가지 솔루션이 있으며 그중 하나는 배치 파일 입니다.

다음과 같이 배치 파일 (which.bat)을 작성하십시오.

@setlocal
@set P2=.;%PATH%
@for %%e in (%PATHEXT%) do @for %%i in (%~n1%%e) do @if NOT "%%~$P2:i"=="" echo %%~$P2:i 

이것은 로컬 디렉토리를 찾고 확장명을 포함하거나 포함하지 않는 filename 매개 변수를 사용하여 현재 디렉토리 또는 PATH에서 첫 번째 일치 항목을 리턴합니다.

그런 다음에 which cmd.exe입력하면 실행할 cmd.exe를 찾는 것처럼 실행하십시오 cmd.


3

Windows에서는 무료 유틸리티 인 Everything 검색 엔진 을 사용하여 전체 또는 부분 이름으로 파일을 즉시 검색 할 수 있습니다 (하드 디스크가 ntfs로 포맷 된 경우).


1
이 검색과 Windows 검색의 밤낮의 차이.
AnthonyVO


1

PowerShell에서

(@($env:path.split(";")) + (pwd).Path)  | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }

이것을 Cmdlet으로 쉽게 변환 할 수 있습니다.

편집에서 제안한 다른 방법으로이를 수행 할 수 있습니다.

get-command notepad.exe | select Source

0

경로를 시작하기 만하면 start 명령을 사용하는 것이 좋습니다. 예를 들어, "start chrome.exe"를 사용하여 설치 위치에 관계없이 Chrom {e | ium}을 시작할 수 있습니다.


0

Heh, 나는이 Windows의 하나의 라이너 배치 파일을 게시해야합니다.

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

시험:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\\ssh.EXE

당신이 코드 랩 경우 그렇진 한 라이너 setlocal enableextensionsendlocal기본적으로 활성화 확장이없는 사용자가 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.