내 자신의 cmd 스크립트 중 하나가 다른 프로그램(경로의 이전)에 의해 숨겨져 있는(가려진) 경로 문제가 있는 경우가 있으므로 다음과 같이 Windows 명령줄에서 프로그램의 전체 경로를 찾을 수 있기를 바랍니다. 그냥 그 이름.
UNIX 명령 ' which'에 해당하는 것이 있습니까?
UNIX에서 which command
은 이러한 섀도잉 문제를 쉽게 찾고 복구하기 위해 주어진 명령의 전체 경로를 인쇄합니다.
질문자 :namin
내 자신의 cmd 스크립트 중 하나가 다른 프로그램(경로의 이전)에 의해 숨겨져 있는(가려진) 경로 문제가 있는 경우가 있으므로 다음과 같이 Windows 명령줄에서 프로그램의 전체 경로를 찾을 수 있기를 바랍니다. 그냥 그 이름.
UNIX 명령 ' which'에 해당하는 것이 있습니까?
UNIX에서 which command
은 이러한 섀도잉 문제를 쉽게 찾고 복구하기 위해 주어진 명령의 전체 경로를 인쇄합니다.
윈도우 서버 2003 이상 (즉, 아무것도 윈도우 XP 32 비트 후) 제공 where.exe
의 일부를 수행 프로그램을 무엇을 which
수행, 그것은 모든 유형의 파일뿐만 아니라 실행 명령을 일치하지만. cd
와 같은 내장 쉘 명령과 일치하지 않습니다.) 와일드카드도 허용하므로 where nt*
%PATH%
및 현재 디렉토리에서 이름이 nt
시작하는 모든 파일을 찾습니다.
where /?
도와주기 위해.
Windows PowerShell은 Where-Object
cmdlet 의 별칭으로 where
where.exe
를 원하는 경우 .exe
확장명을 생략하는 대신 전체 이름을 입력해야 합니다.
이후 버전의 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
실제로 모든 가능성을 반환하지만 특정 검색 규칙에 대해 아주 쉽게 조정할 수 있습니다.
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
파워 쉘의하자가이기 때문에 그리고 당신은 별명 정의 과 같이 정의 할 수 있습니다. which
$ sal which gcm # short form of `Set-Alias which Get-Command` $ which foo ...
PowerShell 명령 은 단순한 실행 파일( .exe
, .ps1
등)이 아닙니다. cmdlet, 함수, 별칭, $Env:PATHEXT
설정된 사용자 지정 실행 접미사 등 Get-Command
는 이러한 모든 명령을 찾고 나열할 수 있습니다(Bash의 type -a foo
와 매우 유사). 이것만으로도 일반적으로 실행 파일을 찾는 것으로 제한되는 where.exe
, which.exe
등보다 낫습니다.
$ 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 ...
+x
) 비트가 설정된 파일인 UNIX와 달리 Windows의 실행 $PATH
환경에 지정된 디렉토리 중 하나에 있는 파일입니다. $PATHEXT
환경에서 파일 이름 접미사가 명명된 변수입니다. 변수(기본값: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
).
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
더 많은 옵션과 예는 Get-Command
를 참조하십시오.
Windows PowerShell:
set-alias which where.exe
PowerShell이 설치되어 있는 경우(권장) 다음 명령을 대략적으로 사용할 수 있습니다(실행 파일 이름을 programName으로 대체).
($Env:Path).Split(";") | Get-ChildItem -filter programName*
더 보기: My Manwich! PowerShell
GnuWin32 도구에는 많은 다른 Unix 도구와 함께 which
which
호출 where
Windows CMD에서 :
$ where php C:\Program Files\PHP\php.exe
Cygwin 은 솔루션입니다. 타사 솔루션을 사용해도 괜찮다면 Cygwin을 사용하는 것이 좋습니다.
Cygwin은 Windows 환경에서 *nix의 편안함을 제공합니다(Windows 명령 셸에서 사용하거나 원하는 *nix 셸을 사용할 수 있음). Windows용 *nix 명령(예: which
PATH
에 포함할 수 있습니다.
내 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:
PowerShell에서는 다른 명령에 대한 형식화된 정보를 제공하는 gcm
실행 파일의 경로만 검색하려면 .Source
사용하세요.
예: gcm git
또는 (gcm git).Source
소소한 정보:
gcm
Get-Command
cmdlet 의 별칭입니다.Set-Alias which gcm
를 사용하여 사용자 지정 별칭을 만들고 (which git).Source
와 같이 사용할 수 있습니다.여기에서 unxutils를 얻으십시오. http://sourceforge.net/projects/unxutils/
Windows 플랫폼의 gold는 모든 멋진 유닉스 유틸리티를 표준 Windows DOS에 넣습니다. 몇 년 동안 사용하고 있습니다.
'어떤'이 포함되어 있습니다. 그러나 대소문자를 구분합니다.
주의: 설치하려면 zip을 어딘가에 폭발시키고 ...\UnxUtils\usr\local\wbin\을 시스템 경로 환경 변수에 추가하십시오.
무료 Pascal 컴파일러를 찾을 수 있다면 이것을 컴파일할 수 있습니다. 최소한 작동하고 필요한 알고리즘을 보여줍니다.
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 eg '); Writeln('"my_cmd.exe param"'); Write ('then invoke Whence with the same extension eg '); 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 { OK, 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.
내가 Windows에서 찾은 최고의 버전은 Joseph Newcomer의 "whereis" 유틸리티로, 그의 사이트 에서 (소스와 함께) 구할 수 있습니다.
"whereis"의 개발에 대한 기사는 읽을 가치가 있습니다.
인터넷에서 찾을 수 있는 Unix의 Win32 포트 중 어느 것도 만족스럽지 않습니다. 모두 다음과 같은 단점 중 하나 이상을 가지고 있기 때문입니다.
그래서 나는 결국 위의 모든 것을 올바르게 지원하는 내 자신을 작성했습니다.
이 배치 파일은 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 /?
참조하십시오 /? 도와주기 위해.
먼저 Downloading Git 에서 Git을 설치한 다음 Git Bash를 열고 다음을 입력할 수 있습니다.
which app-name
Cygwin의 라이트 버전인 GOW(Windows의 GNU)를 사용하고 있습니다. 여기 GitHub에서 가져올 수 있습니다.
GOW(Windows의 GNU)는 Cygwin의 경량 대안입니다. 기본 win32 바이너리로 컴파일된 약 130개의 매우 유용한 오픈 소스 UNIX 응용 프로그램을 설치하는 편리한 Windows 설치 프로그램을 사용합니다. 옵션에 따라 100MB 이상을 실행할 수 있는 Cygwin과 달리 가능한 한 약 10MB로 작게 설계되었습니다. - 소개 설명(Brent R. Matzelle)
GOW에 포함된 명령 목록의 스크린샷:
Ned Batchelder와 유사한 도구를 만들었습니다.
내 도구는 주로 다양한 dll 버전을 검색하기 위한 것이지만 더 많은 정보(날짜, 크기, 버전)를 표시하지만 PATHEXT를 사용하지 않습니다(내 도구를 곧 업데이트할 수 있기를 바랍니다).
이 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 enableextensions 및 endlocal
코드를 래핑하면 한 줄 setlocal enableextensions
.
Windows XP 사용자( where
명령이 내장되어 있지 않음)를 위해 "where like" 명령을 whichr
.
설치하려면 Ruby를 설치하십시오.
그 다음에
gem install whichr
다음과 같이 실행하십시오.
C:> cmd_here
JPSoft의 TCC 및 TCC/LE는 중요한 기능을 추가하는 CMD.EXE 대체품입니다. 영업 이익의 질문에 관련 TCC 가족 명령 프로세서의 내장 명령입니다. which
which
모듈을 꽤 오랫동안 사용해 왔으며 아주 잘 작동합니다: https://www.npmjs.com/package/which 이것은 훌륭한 다중 플랫폼 대안입니다.
이제 Git과 함께 제공 which
것으로 전환했습니다. 경로에 Git /usr/bin
경로를 추가하기만 하면 됩니다. C:\Program Files\Git\usr\bin\which.exe
있습니다. which
바이너리가 C:\Program Files\Git\usr\bin\which.exe
입니다. 더 빠르고 예상대로 작동합니다.
이 시도
set a=%~$dir:1 If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)
그것은을 포함하여 Windows 용 컴파일 된 UNIX 명령, 모두를 다운로드 할 수 which
이 GitHub의 저장소에서 : https://github.com/George-Ogden/UNIX
다음은 Unix 명령어 'WHICH'와 유사한 실행 파일을 찾기 위해 만든 기능입니다.
app_path_func.cmd:
@ECHO OFF CLS FOR /F "skip=2 tokens=1,2* USEBACKQ" %%N IN (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\%~1" /t REG_SZ /v "Path"`) DO ( IF /I "%%N" == "Path" ( SET wherepath=%%P%~1 GoTo Found ) ) FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe %~1`) DO ( SET wherepath=%%F GoTo Found ) FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%PROGRAMFILES%" %~1`) DO ( SET wherepath=%%F GoTo Found ) FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%PROGRAMFILES(x86)%" %~1`) DO ( SET wherepath=%%F GoTo Found ) FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%WINDIR%" %~1`) DO ( SET wherepath=%%F GoTo Found ) :Found SET %2=%wherepath% :End
시험:
@ECHO OFF CLS CALL "app_path_func.cmd" WINWORD.EXE PROGPATH ECHO %PROGPATH% PAUSE
결과:
C:\Program Files (x86)\Microsoft Office\Office15\ Press any key to continue . . .
출처 : http:www.stackoverflow.com/questions/304319/is-there-an-equivalent-of-which-on-the-windows-command-line
malloc의 결과를 캐스팅합니까? (0) | 2021.11.19 |
---|---|
터미널에 컬러 텍스트를 인쇄하는 방법은 무엇입니까? (0) | 2021.11.19 |
.prop() 대 .attr() (0) | 2021.11.13 |
딥 클로닝 개체 (0) | 2021.11.13 |
jQuery로 페이지를 새로 고치려면 어떻게 해야 합니까? (0) | 2021.11.13 |