bash에서 'which'에 해당하는 cmd/powershell은 무엇입니까?
CMD 쉘이 어떤 버전의 실행 파일을 사용하는지 알고 싶습니다.어떤 유닉스 셸이든지, 나는which
그걸 찾기 위해서요.
윈도우 셸 중 하나에 동등한 명령이 있습니까?
여러가지.
where
는 직접 동치입니다.C:\Users\Joey>where cmd C:\Windows\System32\cmd.exe
PowerShell에서는
where
그 자체가 에 대한 별칭입니다.Where-Object
, 따라서 사용해야 합니다.where.exe
PowerShell에 있습니다.인
cmd
사용할 수도 있습니다.for
:C:\Users\Joey>for %x in (powershell.exe) do @echo %~$PATH:x C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
PowerShell에는 다음과 같은 기능이 있습니다.
Get-Command
그리고 그 가명은gcm
인수를 통과한 경우에도 마찬가지입니다(PowerShell의 별칭, cmdlet 및 함수에도 적용됨).PS C:\Users\Joey> Get-Command where CommandType Name Definition ----------- ---- ---------- Alias where Where-Object Application where.exe C:\Windows\system32\where.exe
첫 번째로 반환된 명령은 실행되는 명령입니다.
그WHERE
명령어가 unix와 완전히 같지 않습니다.which
현재 디렉토리 또는 PATH에 있는 일치하는 모든 파일을 나열하기 때문입니다.조이 말대로, 가장 먼저 나열된 것은 실행하는 것입니다.처음 찾은 스크립트만 반환하는 배치 스크립트를 만드는 것은 간단합니다.
@echo off
for /f "delims=" %%F in ('where %1') do (
echo %%F
exit /b
)
그렇지만WHERE
상대적으로 느립니다.
아래는 WH입니다.더 빠르고 조금 더 많이 하는 BAT 스크립트.다음과 같은 이유로 광범위한 지연 확장 토글링을 사용합니다. 1) 따옴표로 묶지 않은 특수 문자가 있는 경우 %PATH%를 확장할 수 없습니다. 2) 지연 확장을 사용하는 동안 FOR 변수를 확장하면 다음을 포함하는 값이 손상됩니다.!
.
::WHICH.BAT CommandName [ReturnVar]
::
:: Determines the full path of the file that would execute if
:: CommandName were executed.
::
:: The result is stored in variable ReturnVar, or else it is
:: echoed to stdout if ReturnVar is not specified.
::
:: If no file is found, then an error message is echoed to stderr.
::
:: The ERRORLEVEL is set to one of the following values
:: 0 - Success: A matching file was found
:: 1 - CommandName is an internal command
:: 2 - No file was found and CommandName is not an internal command
:: 3 - Improper syntax - no CommandName specified
::
@echo off
setlocal disableDelayedExpansion
set "file=%~1"
setlocal enableDelayedExpansion
if not defined file (
>&2 echo Syntax error: No CommandName specified
exit /b 3
)
:: test for internal command
echo(!file!|findstr /i "[^abcdefghijklmnopqrstuvwxyz]" >nul || (
set "empty=!temp!\emptyFolder"
md "!empty!" 2>nul
del /q "!empty!\*" 2>nul >nul
setlocal
pushd "!empty!"
set path=
(call )
!file! /? >nul 2>nul
if not errorlevel 9009 (
>&2 echo "!file!" is an internal command
popd
exit /b 1
)
popd
endlocal
)
:: test for external command
set "noExt="
if "%~x1" neq "" if "!PATHEXT:%~x1=!" neq "!PATHEXT!" set noExt="";
set "modpath=.\;!PATH!"
@for %%E in (%noExt%%PATHEXT%) do @for %%F in ("!file!%%~E") do (
setlocal disableDelayedExpansion
if not "%%~$modpath:F"=="" if not exist "%%~$modpath:F\" (
endlocal & endlocal & endlocal
if "%~2"=="" (echo %%~$modpath:F) else set "%~2=%%~$modpath:F"
exit /b 0
)
endlocal
)
endlocal
>&2 echo "%~1" is not a valid command
exit /b 2
갱신하다
PATH 어딘가에 동일한 root 이름의 exe 파일이 존재하는 경우 내부 명령어를 외부로 잘못 기재하고 있어 위 스크립트를 크게 수정해야 했습니다.
언급URL : https://stackoverflow.com/questions/11009598/whats-the-cmd-powershell-equivalent-of-which-on-bash
'programing' 카테고리의 다른 글
PowerShell: IIS 7 및 IIS 7.5 모두에서 ps1 스크립트로 Web Administration 로드 (0) | 2023.10.16 |
---|---|
볼트 오류, 서버가 HTTPS 클라이언트에 HTTP 응답을 제공함 (0) | 2023.10.16 |
MySQL 8 암호가 작동하지 않는 새 사용자 생성 (0) | 2023.10.16 |
로컬 호스트에서 RMariaDB로 DB Connect 변경으로 인한 "NA in INT 64 Error" (0) | 2023.10.16 |
Uncatched TypeError: null의 'clientWidth' 속성을 읽을 수 없습니다. (0) | 2023.10.16 |