Windows 배치 파일의 PATH 환경 변수에 실행 파일이 있는지 테스트하는 간단한 방법을 찾고 있습니다.
OS에서 제공하지 않는 외부 도구는 사용할 수 없습니다. 필요한 최소 Windows 버전은 Windows XP입니다.
답변
for %%X in (myExecutable.exe) do (set FOUND=%%~$PATH:X)
if defined FOUND ...
다른 확장 기능에 필요한 경우 다음을 반복하십시오 PATHEXT
.
set FOUND=
for %%e in (%PATHEXT%) do (
for %%X in (myExecutable%%e) do (
if not defined FOUND (
set FOUND=%%~$PATH:X
)
)
)
where
레거시 Windows 버전에도 이미 존재할 수 있지만 액세스 권한이 없으므로 말할 수 없습니다. 내 컴퓨터에서 다음도 작동합니다.
where myExecutable
찾을 수없는 경우 0이 아닌 종료 코드로 반환됩니다. 배치에서는 출력을으로 리디렉션하고 싶을 수도 있습니다 NUL
.
명심하세요
배치 .bat
파일 ( )과 명령 줄 에서 구문 분석하는 방식이 다르므로 (배치 파일에 %0
–가 %9
있으므로) 두 배로 늘려야합니다 %
. 명령 줄에서는 필요하지 않으므로 변수의 경우 %X
.
답변
Windows Vista 이상 버전 where.exe
은 경로에서 프로그램을 검색 하는 프로그램과 함께 제공됩니다. 다음과 같이 작동합니다.
D:\>where notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe
D:\>where where
C:\Windows\System32\where.exe
배치 파일에서 사용하려면 출력을 /q
설정 ERRORLEVEL
하고 생성하지 않는 스위치를 사용할 수 있습니다 .
where /q myapplication
IF ERRORLEVEL 1 (
ECHO The application is missing. Ensure it is installed and placed in your PATH.
EXIT /B
) ELSE (
ECHO Application exists. Let's go!
)
또는 메시지를 인쇄하고 앱을 종료하는 간단한 (읽기 어려운) 약식 버전 :
where /q myapplication || ECHO Cound not find app. && EXIT /B
답변
다음은 응용 프로그램 실행을 시도하고 나중에 오류를 처리하는 간단한 솔루션입니다 .
file.exe /? 2> NUL
IF NOT %ERRORLEVEL%==9009 ECHO file.exe exists in path
오류 코드 9009는 일반적으로 파일을 찾을 수 없음을 의미합니다.
유일한 단점은 file.exe
발견되면 실제로 실행된다는 것입니다 (어떤 경우에는 바람직하지 않음).
답변
이는 매개 변수 대체를 통해 수행 할 수 있습니다.
%~$PATH:1
이것은 % 1에있는 실행 파일 이름의 전체 경로를 반환합니다. 그렇지 않으면 빈 문자열입니다.
사용자 정의 변수에서는 작동하지 않습니다. 따라서 실행 파일 이름이 스크립트에 대한 매개 변수가 아닌 경우 서브 루틴이 필요합니다. 예를 들면 :
call :s_which app.exe
if not "%_path%" == "" (
"%_path%"
)
goto :eof
:s_which
setlocal
endlocal & set _path=%~$PATH:1
goto :eof
답변
@echo off
set found=
set prog=cmd.exe
for %%i in (%path%) do if exist %%i\%prog% set found=%%i
echo "%found%"
if "%found%"=="" ....
답변
때로는이 간단한 솔루션이 작동하여 출력이 예상 한 것과 일치하는지 확인합니다. 첫 번째 줄은 명령을 실행하고 표준 출력의 마지막 줄을 가져옵니다.
FOR /F "tokens=*" %%i in (' "xcopy /? 2> nul" ') do SET xcopyoutput=%%i
if "%xcopyoutput%"=="" echo xcopy not in path.
답변
시작 폴더에서 나와 같은 것을 검색하는 경우 폴더로 이동해야합니다. 예를 들어 시작 폴더에서 exe를 검색하고 다음과 같은 코드를 사용합니다.
@echo off
cd C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
where /q program.exe
IF ERRORLEVEL 1 (
echo F | xcopy /Y /S /I /E "\\programsetup\programsetup.exe"
"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\program.exe"
) ELSE (
ECHO Application exists. Let's go!
)