Windows 명령 행에 'which'에 해당하는 것이 있습니까?


2350

때때로 자신의 cmd 스크립트 중 하나가 다른 프로그램 (경로의 이전)에 의해 숨겨져있는 그림자 문제가 있기 때문에 주어진 Windows 명령 줄에서 프로그램의 전체 경로를 찾고 싶습니다. 그 이름 만

UNIX 명령 'which'에 해당하는 것이 있습니까?

UNIX에서는 which command이러한 섀도 잉 문제를 쉽게 찾아서 복구하기 위해 지정된 명령의 전체 경로를 인쇄합니다.


3
Foredecker : "which"는 셸 프롬프트에서 명령을 입력하면 실행될 실행 파일의 PATH를 검색합니다.
Greg Hewgill

3
당신이있는 경우 예를 들어, 자바의 5 버전을 설치하고 하나는 "어떤 자바"입력 할 수 있습니다 사용하는 모르고 그것은 당신에게 바이너리의 경로 제공
ninesided

9
@Foredecker, MR은 Win2k3의 "어딘가"에 있지만 Win2k3은 문제의 일부가 아니라고 말합니다. "where"가 다른 Windows 버전에 없으면 다른 답변도 유효합니다. 모든 Windows 버전에서 작동하는 IMNSHO가 가장 좋습니다. 또한 다른 답변은 잘못된 것이 아니라 다른 방식으로 수행하는 것입니다.
paxdiablo

36
나는이 질문이 슈퍼 유저 이전에 일어났다는 것을 알고 있습니다.
palswim

16
which표준 Unix 에는 명령 이 없습니다 . POSIX 유틸리티는 type입니다. C 셸에는 which 명령이 있으며 일부 시스템에는이 명령이 외부 실행 파일로 있습니다. 예를 들어, 데비안 리눅스에서는 which이라는 패키지에서 나온다 debutils. 이 외부 which는 쉘 내장, 별명 또는 기능을 "보지"않습니다. type않습니다; Bash type에는이를 억제하고 경로 조회를 수행하는 옵션이 있습니다.
Kaz

답변:


2550

Windows Server 2003 이상 (즉, Windows XP 32 비트 이후)은 실행 가능한 명령뿐만 아니라 모든 유형의 파일과 일치하지만 where.exe일부 기능을 수행 하는 프로그램을 제공 which합니다. (와 같은 내장 쉘 명령과는 일치하지 않습니다 cd.) 와일드 카드도 사용할 수 있으므로 현재 디렉토리에서 이름이로 시작하는 where nt*모든 파일을 찾습니다 .%PATH%nt

시도 where /?도움.

Windows PowerShell을가 정의하는 주 where에 대한 별칭으로 cmdlet은 , 그래서 당신이 원하는 경우에 , 당신은 생략하는 대신 전체 이름을 입력해야 확장.Where-Objectwhere.exe.exe


30
grep 은 입력 내용 을 검사 하기 때문에 입력해야합니다. whichwhere.exe 는 PATH 환경 변수에 설정된 디렉토리 세트의 파일 이름 만 봅니다 .
Michael Ratanapintha

12
수정 - Ajedi32 @ XP에 있지 않습니다. 내가 말했듯이 "Windows Server 2003 이상".
Michael Ratanapintha

24
Windows 8에서 작동
rob

57
이 것을 조심 PowerShell의 실 거예요 작업 이 where.exe 입력하지 않으면
JonnyRaa

17
그 기억 where.exe쉘 내장되지 않습니다, 당신은 할 필요가 %windir%\system32귀하에 %PATH%- 경우하지 않을 수있는, 사용으로 where당신이 당신의 경로에 문제가 작업을 할 수 있음을 시사!
Tomasz Gandor

288

이후 버전의 Windows에는 where명령이 있지만 다음과 같이 환경 변수 수정자를 사용하여 Windows XP에서도이를 수행 할 수 있습니다.

c:\> for %i in (cmd.exe) do @echo.   %~$PATH:i
   C:\WINDOWS\system32\cmd.exe

c:\> for %i in (python.exe) do @echo.   %~$PATH:i
   C:\Python25\python.exe

추가 도구가 필요하지 않으며 PATH사용하려는 환경 변수 (경로 형식)를 대체 할 수 있기 때문에 제한되지 않습니다 .


그리고 PATHEXT (Windows 자체와 마찬가지로)의 모든 확장을 처리 할 수 ​​있기를 원한다면이 트릭을 수행하십시오.

@echo off
setlocal enableextensions enabledelayedexpansion

:: Needs an argument.

if "x%1"=="x" (
    echo Usage: which ^<progName^>
    goto :end
)

:: First try the unadorned filenmame.

set fullspec=
call :find_it %1

:: Then try all adorned filenames in order.

set mypathext=!pathext!
:loop1
    :: Stop if found or out of extensions.

    if "x!mypathext!"=="x" goto :loop1end

    :: Get the next extension and try it.

    for /f "delims=;" %%j in ("!mypathext!") do set myext=%%j
    call :find_it %1!myext!

:: Remove the extension (not overly efficient but it works).

:loop2
    if not "x!myext!"=="x" (
        set myext=!myext:~1!
        set mypathext=!mypathext:~1!
        goto :loop2
    )
    if not "x!mypathext!"=="x" set mypathext=!mypathext:~1!

    goto :loop1
:loop1end

:end
endlocal
goto :eof

:: Function to find and print a file in the path.

:find_it
    for %%i in (%1) do set fullspec=%%~$PATH:i
    if not "x!fullspec!"=="x" @echo.   !fullspec!
    goto :eof

실제로 모든 가능성을 반환하지만 특정 검색 규칙에 따라 쉽게 조정할 수 있습니다.


7
이봐, 내가 배웠 으면 좋겠다! MS-DOS 또는 Win9x (즉, command.com)에서는 작동하지 않습니다. (레이몬드 첸 배치 파일로 전환 할 수있는보다 "정교한"버전은 blogs.msdn.com/oldnewthing/archive/2005/01/20/357225.aspx를 )
마이클 Ratanapintha

110
@Michael, 여전히 DOS 나 Win95를 사용하고 있다면 경로에서 실행 파일을 찾는 것이 가장 적은 문제입니다 :-)
paxdiablo

Windows는 .exe 이상을 실행 파일로 인식합니다. 마지막으로 whichW95 / DOS 일에 코드를 다시 코딩 했을 때 검색 순서는 현재 dir, 각 경로 dir, cmd.com, cmd.exe, cmd.bat입니다. 따라서 현재 dir의 cmd.bat도 경로에 cmd.exe sofrowhere 실행
Mawg는 모니카

3
@mawg, 원본은 확장명을 알고있는 곳입니다. 확장자를 추가하는 속임수가 발생하지 않는 UNIX의 확장 기능을 반영하기 때문입니다. 나는 이제 당신이 원하는 것을 할 수있는 것을 추가했지만 더 이상 스크립트만큼 간단한 명령이 아닙니다. 먼저 unadorned 명령을 시도한 다음 각 확장 명령을 시도합니다. 희망이 도움이됩니다. 적합하다고 생각되는대로 필요에 따라 조정할 수 있습니다 (예를 들어 Windows와 동일한 검색 순서를 원할 경우 모든 가능성을 보여줍니다).
paxdiablo

2
이것을 배치 스크립트로 바꾸려면 "which.bat"라는 파일을 만듭니다. @echo off for %%i in (%1) do @echo. %%~$PATH:%i cmd.exe를 실행할 때마다로드하는 alias.bat 스크립트에 파일 을 추가하려면 (위의 스크립트를 C : \ usr이라는 새 디렉토리에 넣습니다. \ aliases) : DOSKEY which=C:\usr\aliases\which.bat $* 그러면 alias.bat 파일을 사용하여 cmd.exe를 시작하는 스크립트를 만들 수 있습니다. cmd.exe /K E:\usr\aliases\alias.bat
Brad T.

151

PowerShell에서의 Get-Command어느 곳에서나 실행 파일을 찾을 수 있습니다 $Env:PATH.

Get-Command eventvwr

CommandType   Name          Definition
-----------   ----          ----------
Application   eventvwr.exe  c:\windows\system32\eventvwr.exe
Application   eventvwr.msc  c:\windows\system32\eventvwr.msc

또한을 통해 사용자 정의 실행 파일의 확장자 PowerShell cmdlet을, 함수, 별칭, 파일을 찾아 $Env:PATHEXT(배쉬의 아주 가깝다 현재 쉘에 대해 정의 등 type -a foo) - 만드는 것이 더 나은 이동 - 다른 도구를 좋아하는 것보다 where.exe, which.exe등이 모르고있는 PowerShell 명령.

이름의 일부만 사용하여 실행 파일 찾기

gcm *disk*

CommandType     Name                             Version    Source
-----------     ----                             -------    ------
Alias           Disable-PhysicalDiskIndication   2.0.0.0    Storage
Alias           Enable-PhysicalDiskIndication    2.0.0.0    Storage
Function        Add-PhysicalDisk                 2.0.0.0    Storage
Function        Add-VirtualDiskToMaskingSet      2.0.0.0    Storage
Function        Clear-Disk                       2.0.0.0    Storage
Cmdlet          Get-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          New-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          Remove-PmemDisk                  1.0.0.0    PersistentMemory
Application     diskmgmt.msc                     0.0.0.0    C:\WINDOWS\system32\diskmgmt.msc
Application     diskpart.exe                     10.0.17... C:\WINDOWS\system32\diskpart.exe
Application     diskperf.exe                     10.0.17... C:\WINDOWS\system32\diskperf.exe
Application     diskraid.exe                     10.0.17... C:\WINDOWS\system32\diskraid.exe
...

사용자 정의 실행 파일 찾기

Windows 이외의 다른 실행 파일 (python, ruby, perl 등)을 찾으려면 해당 실행 파일의 확장명을 가진 파일 을 식별 할 수 있도록 해당 실행 파일의 파일 확장자를 PATHEXT환경 변수 (기본값은 .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL)에 추가해야합니다 PATH. 으로 Get-Command이 변수를 존중, 그것은 목록의 사용자 정의 실행 파일을 확장 할 수 있습니다. 예 :

$Env:PATHEXT="$Env:PATHEXT;.dll;.ps1;.psm1;.py"     # temporary assignment, only for this shell's process

gcm user32,kernel32,*WASM*,*http*py

CommandType     Name                        Version    Source
-----------     ----                        -------    ------
ExternalScript  Invoke-WASMProfiler.ps1                C:\WINDOWS\System32\WindowsPowerShell\v1.0\Invoke-WASMProfiler.ps1
Application     http-server.py              0.0.0.0    C:\Users\ME\AppData\Local\Microsoft\WindowsApps\http-server.py
Application     kernel32.dll                10.0.17... C:\WINDOWS\system32\kernel32.dll
Application     user32.dll                  10.0.17... C:\WINDOWS\system32\user32.dll

sal which gcm(짧은 형식의 set-alias which get-command)을 사용 하여 별칭을 빠르게 설정할 수 있습니다 .

자세한 내용과 예는에 대한 온라인 도움말에서 찾을 수 있습니다 Get-Command.


2
실행 파일 그 이상을 발견합니다. 그것은 또한 명령 파일을 잡아
Maximilian Burszley

2
@ TheIncorrigible1- 배치 파일 ( , 등) 과 같은 명령 파일 을 의미하는 경우 확장명이 변수에 이름이 지정되어 (기본적으로 ) 실행 파일로 간주됩니다 . 다른 실행 유형 (예 , 등)에 파일 확장자를 첨가하여 실행 관계를 생성함으로써 추가 될 수 / 등 - docs.python.org/3.3/using/....BAT.CMDPATHEXTPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL.py.rbassocftype
shalomb


40

PowerShell을 설치 한 경우 (권장) 다음 명령을 대략적으로 동등한 것으로 사용할 수 있습니다 (실행 파일 이름 대신 programName을 사용).

($Env:Path).Split(";") | Get-ChildItem -filter programName*

자세한 내용은 여기 : My Manwich! PowerShell 어느


1
이 정확한 파워 쉘 명령을 찾고있었습니다. where.exe를 사용했지만 출력을 구문 분석하는 동안 오류 코드를 엉망으로 만드는 것이 기본 powershell 솔루션보다 훨씬 열등합니다. 감사!
scobi

9
그러나 ($Env:Path).Split(";") | Get-ChildItem -filter programName*입력하기가 매우 쉽습니다 ... ;-)
Craig

일반적으로 시스템에 의해 해결되는 변수 (일명 % JAVA_HOME %)가있는 경우에도 실패합니다.
dragon788

which.exe를 작동시킬 수 없으며 이것을 시도해 보았습니다.
Asfand Qazi


24

Windows CMD which호출에서 where:

$ where php
C:\Program Files\PHP\php.exe

17

Cygwin 은 솔루션입니다. 타사 솔루션을 사용하는 것이 마음에 들지 않으면 Cygwin을 사용하십시오.

Cygwin은 Windows 환경에서 * nix의 편안함을 제공합니다 (Windows 명령 쉘에서 사용하거나 선택한 * nix 쉘을 사용할 수 있음). whichWindows에 대한 전체 * nix 명령 (예 :)을 제공하며 해당 디렉토리를에 포함시킬 수 있습니다 PATH.


10
GnuWin32는 기본 가질 수있는 더 나은이 경우에 페루 치오에 의해 앞에서 언급 한 경우 실행 혼자.
Piotr Dobrogost

GnuWin32는 훌륭하고 사용하지만 GnuWin32 도구를 설치하지 않고이 기능을 원하면 where.exe가 올바른 호출처럼 보입니다. 그래도 GnuWin32 도구를 네트워크의 \ bin $ 공유에 배치하여 로컬에 설치되지 않은 워크 스테이션 (및 배치 파일)에서 사용할 수 있습니다.
Craig

1
우리가 윈도우에서 Cygwin에서 사용에 대해 말할 때, 나는 선호 : cygpath -w "`하는 <APPNAME>`"
mpasko256

12

PowerShell에서는 is gcm이며 다른 명령에 대한 형식화 된 정보를 제공합니다. 실행 파일의 경로 만 검색하려면을 사용하십시오 .Source.

예를 들어 : gcm git또는(gcm git).Source

가벼운 음식 :

  • Windows XP에서 사용 가능합니다.
  • PowerShell 1.0부터 사용할 수 있습니다.
  • gcmGet-Commandcmdlet 의 별칭입니다 .
  • 매개 변수가 없으면 호스트 셸에서 제공하는 사용 가능한 모든 명령이 나열됩니다.
  • 을 사용하여 사용자 정의 별명을 작성하고 Set-Alias which gcm다음과 같이 사용할 수 있습니다 (which git).Source.
  • 공식 문서 : https://technet.microsoft.com/en-us/library/ee176842.aspx

11

PowerShell 프로필에 'which'라는 함수가 있습니다.

function which {
    get-command $args[0]| format-list
}

출력 결과는 다음과 같습니다.

PS C:\Users\fez> which python


Name            : python.exe
CommandType     : Application
Definition      : C:\Python27\python.exe
Extension       : .exe
Path            : C:\Python27\python.exe
FileVersionInfo : File:             C:\Python27\python.exe
                  InternalName:
                  OriginalFilename:
                  FileVersion:
                  FileDescription:
                  Product:
                  ProductVersion:
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:

다른 솔루션 중 어느 것도 나를 위해 일하지 않았지만 > get-command app.exe | format-list완벽하게 작동했습니다!
Alexander McFarlane

10

여기에서 unxutils를 얻으십시오 : http://sourceforge.net/projects/unxutils/

Windows 플랫폼의 경우 금은 모든 유닉스 유틸리티를 표준 Windows DOS에 넣습니다. 몇 년 동안 사용되었습니다.

그것은 '포함'되어 있습니다. 그래도 대소 문자를 구분합니다.

NB : 설치하려면 압축을 어딘가에서 분해하고 ... \ UnxUtils \ usr \ local \ wbin \을 시스템 경로 env 변수에 추가하십시오.


2
그것은 대소 문자를 구분하지 않으며, 또한 어떤 java.exe 대신에 어떤 java.exe를 말해야합니다
-Windows

줄 바꿈과 관련이 있지만 몇 가지 좌절이 있습니다. 예를 들어 grep .은 \ r 을 입력하지 않으면 EOL과 일치하지 않습니다 . 그래도 99 % 솔루션입니다!
dash-tom-bang

예, 대소 문자를 구분하지 않지만 Windows의 기본 파일 이름은 대소 문자를 구분하지 않습니다.
Wernfried Domscheit


8

무료 파스칼 컴파일러를 찾을 수 있다면 이것을 컴파일 할 수 있습니다. 적어도 작동하고 필요한 알고리즘을 보여줍니다.

program Whence (input, output);
  Uses Dos, my_funk;
  Const program_version = '1.00';
        program_date    = '17 March 1994';
  VAR   path_str          : string;
        command_name      : NameStr;
        command_extension : ExtStr;
        command_directory : DirStr;
        search_dir        : DirStr;
        result            : DirStr;


  procedure Check_for (file_name : string);
    { Check existence of the passed parameter. If exists, then state so   }
    { and exit.                                                           }
  begin
    if Fsearch(file_name, '') <> '' then
    begin
      WriteLn('DOS command = ', Fexpand(file_name));
      Halt(0);    { structured ? whaddayamean structured ? }
    end;
  end;

  function Get_next_dir : DirStr;
    { Returns the next directory from the path variable, truncating the   }
    { variable every time. Implicit input (but not passed as parameter)   }
    { is, therefore, path_str                                             }
    var  semic_pos : Byte;

  begin
      semic_pos := Pos(';', path_str);
      if (semic_pos = 0) then
      begin
        Get_next_dir := '';
        Exit;
      end;

      result := Copy(Path_str, 1, (semic_pos - 1));  { return result   }
      { Hmm! although *I* never reference a Root drive (my directory tree) }
      { is 1/2 way structured), some network logon software which I run    }
      { does (it adds Z:\ to the path). This means that I have to allow    }
      { path entries with & without a terminating backslash. I'll delete   }
      { anysuch here since I always add one in the main program below.     }
      if (Copy(result, (Length(result)), 1) = '\') then
         Delete(result, Length(result), 1);

      path_str := Copy(path_str,(semic_pos + 1),
                       (length(path_str) - semic_pos));
      Get_next_dir := result;
  end;  { Of function get_next_dir }

begin
  { The following is a kludge which makes the function Get_next_dir easier  }
  { to implement. By appending a semi-colon to the end of the path         }
  { Get_next_dir doesn't need to handle the special case of the last entry }
  { which normally doesn't have a semic afterwards. It may be a kludge,    }
  { but it's a documented kludge (you might even call it a refinement).    }
  path_str := GetEnv('Path') + ';';

  if (paramCount = 0) then
  begin
    WriteLn('Whence: V', program_version, ' from ', program_date);
    Writeln;
    WriteLn('Usage: WHENCE command[.extension]');
    WriteLn;
    WriteLn('Whence is a ''find file''type utility witha difference');
    Writeln('There are are already more than enough of those :-)');
    Write  ('Use Whence when you''re not sure where a command which you ');
    WriteLn('want to invoke');
    WriteLn('actually resides.');
    Write  ('If you intend to invoke the command with an extension e.g ');
    Writeln('"my_cmd.exe param"');
    Write  ('then invoke Whence with the same extension e.g ');
    WriteLn('"Whence my_cmd.exe"');
    Write  ('otherwise a simple "Whence my_cmd" will suffice; Whence will ');
    Write  ('then search the current directory and each directory in the ');
    Write  ('for My_cmd.com, then My_cmd.exe and lastly for my_cmd.bat, ');
    Write  ('just as DOS does');
    Halt(0);
  end;

  Fsplit(paramStr(1), command_directory, command_name, command_extension);
  if (command_directory <> '') then
  begin
WriteLn('directory detected *', command_directory, '*');
    Halt(0);
  end;

  if (command_extension <> '') then
  begin
    path_str := Fsearch(paramstr(1), '');    { Current directory }
    if   (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
    else
    begin
      path_str := Fsearch(paramstr(1), GetEnv('path'));
      if (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
                          else Writeln('command not found in path.');
    end;
  end
  else
  begin
    { O.K, the way it works, DOS looks for a command firstly in the current  }
    { directory, then in each directory in the Path. If no extension is      }
    { given and several commands of the same name exist, then .COM has       }
    { priority over .EXE, has priority over .BAT                             }

    Check_for(paramstr(1) + '.com');     { won't return if file is found }
    Check_for(paramstr(1) + '.exe');
    Check_for(paramstr(1) + '.bat');

    { Not in current directory, search through path ... }

    search_dir := Get_next_dir;

    while (search_dir <> '') do
    begin
       Check_for(search_dir + '\' + paramstr(1) + '.com');
       Check_for(search_dir + '\' + paramstr(1) + '.exe');
       Check_for(search_dir + '\' + paramstr(1) + '.bat');
       search_dir := Get_next_dir;
    end;

    WriteLn('DOS command not found: ', paramstr(1));
  end;
end.

21
와, 아직도 파스칼을 사용하는 사람들이 있습니까? :-)
paxdiablo 1

6
나는 상상합니다. 그러나 나는 아닙니다. program_date = '1994 년 3 월 17 일'행을 보셨습니까?
Mawg는 모니카

1
단위 my_funk;는 불필요합니다. 파스칼 프로그램을 게시 해 주셔서 감사합니다. 파스칼이 진화하지 않은 것은 유감입니다.
yannis

2
아,하지만 그렇습니다. 예를 들어 이제 객체 지향입니다. 이 위대한 무료, 크로스 플랫폼, 구현 및 IDE가에있다 lazarus-ide.org 그리고 볼랜드의 직계 후손은 여전히 델파이에 살고 embarcadero.com/products/delphi 스타터 에디션 $ 299 (IMO) 매우 비싸다 "사용 가능한"에디션의 경우 $ 1k. 그러나 Windows, iO, Mac, Android와 같은 크로스 플랫폼입니다. 시험판을 받거나 나사로를 사용하고 20 년이 더 젊음을 느낀다 .-)
Mawg는 Monica Monica

1
@yannis "파스칼이 발전하지 못한 동정"... "Turbo Pascal"과는 별개로 Anders는 C #을 디자인하려고합니까?
piers7

7

내가 Windows에서 찾은 가장 좋은 버전은 Joseph Newcomer의 "whereis"유틸리티 입니다. .

"whereis"의 개발에 관한 기사는 읽을 가치가 있습니다.


1
늦은 의견 : Win 7 64 비트에서 64 비트 실행 파일을 찾는 데 문제가 있습니다.
Axel Kemper 2016 년


6

인터넷에서 찾을 수있는 Unix의 Win32 포트는 모두 하나 이상의 단점이 있기 때문에 풍자적입니다.

  • Windows PATHEXT 변수를 지원하지 않습니다. (경로를 스캔하기 전에 각 명령에 암시 적으로 추가 된 확장 목록을 순서와 순서대로 정의합니다.)
  • cmd.exe 코드 페이지를 지원하지 않으므로 ASCII가 아닌 문자가 포함 된 경로가 잘못 표시됩니다. (나는 내 ​​이름으로 ç를 사용하여 매우 민감합니다 :-))
  • cmd.exe 및 PowerShell 명령 줄에서 고유 한 검색 규칙을 지원하지 않습니다. (공개적으로 사용 가능한 도구는 PowerShell 창에서 .ps1 스크립트를 찾지 만 cmd 창에서는 찾지 않습니다!)

그래서 나는 결국 내 자신의 글을 올렸습니다.

사용 가능 : http://jf.larvoire.free.fr/progs/which.exe


참고로 위에서 언급 한 which.exe 도구 및 기타 여러 도구를 github.com/JFLarvoire/SysToolsLib에서 오픈 소스 했습니다 . 최신 버전, 보고서 문제 등이있을 수 있습니다.
Jean-François Larvoire

6

이 배치 파일은 CMD 변수 처리를 사용하여 경로에서 실행될 명령을 찾습니다. 참고 : 현재 디렉토리는 항상 경로 전에 수행됩니다) 및 사용되는 API 호출에 따라 경로 전후에 다른 위치가 검색됩니다.

@echo off
echo. 
echo PathFind - Finds the first file in in a path
echo ======== = ===== === ===== ==== == == = ====
echo. 
echo Searching for %1 in %path%
echo. 
set a=%~$PATH:1
If "%a%"=="" (Echo %1 not found) else (echo %1 found at %a%)

set /?도움이 필요하면 참조하십시오 .


6

Cygwin의 라이트 버전 인 GOW (Windows의 GNU)를 사용하고 있습니다. 여기 GitHub 에서 가져올 수 있습니다 .

GOW (Windows의 GNU)는 Cygwin의 간단한 대안입니다. 기본 win32 바이너리로 컴파일 된 약 130 개의 매우 유용한 오픈 소스 UNIX 응용 프로그램을 설치하는 편리한 Windows 설치 프로그램을 사용합니다. 옵션에 따라 100MB 이상을 실행할 수있는 Cygwin과 달리 가능한 한 약 10MB 정도 작게 설계되었습니다. - 설명 (Brent R. Matzelle)

GOW에 포함 된 명령 목록의 스크린 샷 :

여기에 이미지 설명을 입력하십시오


5

Ned Batchelder와 비슷한 도구를 만들었습니다.

PATH에서 .dll 및 .exe 파일 검색

내 도구는 다양한 dll 버전을 검색하는 데 주로 사용되지만 더 많은 정보 (날짜, 크기, 버전)를 표시하지만 PATHEXT를 사용하지 않습니다 (곧 도구를 업데이트하겠습니다).


5

이 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.


2
내가 이해할 수 있도록 여러 줄로 선호합니다. ;-)
Gringo Suave

4

Windows XP 사용자 ( where명령이 내장 되어 있지 않은 사용자 )에게 "where like"명령을라는 rubygem으로 작성했습니다 whichr.

설치하려면 Ruby를 설치하십시오.

그때

gem install whichr

다음과 같이 실행하십시오.

C :> 어느 cmd_here


3
Windows XP에서 무언가를 제안하기 때문에 귀하가 다운 투표를 한 것으로 의심됩니다.
sebastian-c

1
사소한 명령을 구현하기 위해 루비를 설치하는 것은 어려운 일이 아닙니다. 배치 스크립트에 넣을 수있는 위의 for 루프가 있습니다.
Gringo Suave

2
상세 모드에서 실행하는 경우 The Witcher 의 테마 곡에 오프닝 라인을 인쇄합니까 ? ;)
Agi Hammerthief

3

JPSoft의 TCC 및 TCC / LE는 중요한 기능을 추가하는 CMD.EXE 교체입니다. OP의 질문과 관련하여 whichTCC 제품군 명령 프로세서를위한 기본 제공 명령이 있습니다.


2

나는 whichnpm 에서 모듈을 꽤 오랫동안 사용했으며 매우 잘 작동합니다 : https://www.npmjs.com/package/which 훌륭한 멀티 플랫폼 대안입니다.

이제 whichGit과 함께 제공되는 것으로 전환했습니다 . /usr/binGit 의 경로를 경로에 추가하십시오 C:\Program Files\Git\usr\bin\which.exe. which바이너리에있을 것입니다 C:\Program Files\Git\usr\bin\which.exe. 더 빠르며 예상대로 작동합니다.


1

이 시도

set a=%~$dir:1
If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.