2016-06-27 2 views
0

환경 변수가없는 경우를 대비하여 환경 변수를 설정하려고 시도하고 있는데, 존재하면 스크립트가 종료됩니다. 나는이 다음 코드로 시도하고있다.배치 파일을 사용하지 않을 경우 환경 변수를 설정하십시오.

@echo off 
echo %machine% > c:\machineoutput.txt 
findstr /I /c:"C:\Oracle\Ora12c\perl\bin" c:\machineoutput.txt 
if %errorlevel% == 0 (
    goto SETPATH 
) else (
    EOF 
) 
:SETPATH 
setx /m machine "%oracle_home%\perl\bin;%path%" 
:EOF 
exit 

하지만 어떻게해야 제대로 작동하지 않는 지 알 수 있습니다. 변수를 설정할 수 있지만 변수가 존재하더라도 다시 설정 한 다음 종료됩니다.

내가 잘못하고있는 것을 알아내는 데 도움을주십시오. C:\Oracle\Ora12c\perl\bin%oracle_home%\perl\bin 시스템 환경 변수 PATH에 추가할지 여부를 결정하기 위해 비표준 환경 변수 machine에 있는지 확인할 이유

+1

은 왜 당신'고토 SETPATH' 첫 분기 만'EOF' 다른 지점에서 아무데도 가지 않고? –

+0

@ LưuVĩnhPhúc이 배치 파일은 다른 배치 파일에서 호출되므로 경로가 존재하면이 배치 파일이 종료되고 호출 된 곳의 상위 배치 파일이 작업을 다시 시작합니다.이 파일의 EOF로갑니다. 경로가 존재하지 않으면 경로가 설정됩니다. – n00b

+0

아니요, EOF가 유효한 명령이 아니므로 오류가 발생합니다. 발가락 EOF 레이블을 사용하려면'goto EOF'를 사용하십시오. –

답변

0

모르겠어요. 이 디렉토리 경로가 존재하는지 확인하려면 PATH 시스템을 확인하는 것이 좋습니다.

EOF은 유효한 명령이 아닙니다. 따라서 Windows 명령 프로세서는 오류 메시지를 출력하고 다음 명령 줄이 setx 인 줄과 함께 계속됩니다. 이것이 배치 코드가 작동하지 않는 이유입니다. ELSE 분기의 명령은 goto :EOF이어야합니다.

훨씬 더 나은 %oracle_home%\perl\bin 또는 확장 된 해당 시스템 PATH에 존재 시스템에의 앞에 추가를 PATH 시스템에 존재하지 않는 경우 PATH 대신를 추가하는 경우 검사 다음 코드 일 것이다. 이 배치 코드 템플릿으로 사용 Why are other folder paths also added to system PATH with SetX and not only the specified folder path?에이 배치 코드를 읽어 대답에 대한 자세한 내용은

@echo off 
if not exist "%oracle_home%\perl\bin\*" goto :EOF 
setlocal EnableExtensions DisableDelayedExpansion 

for /F "skip=2 tokens=1,2*" %%N in ('%SystemRoot%\System32\reg.exe query "HKLM\System\CurrentControlSet\Control\Session Manager\Environment" /v "Path" 2^>nul') do (
    if /I "%%N" == "Path" (
     set "SystemPath=%%P" 
     goto CheckPath 
    ) 
) 
echo Error: System environment variable PATH not found. 
echo. 
endlocal 
pause 
goto :EOF 

:CheckPath 
setlocal EnableDelayedExpansion 
set "Separator=" 
set "PathToAdd=%%oracle_home%%\perl\bin" 
set "OraclePerlPath=%oracle_home%\perl\bin" 
if not "!SystemPath:~-1!" == ";" set "Separator=;" 
if "!SystemPath:%PathToAdd%=!" == "!SystemPath!" (
    if "!SystemPath:%OraclePerlPath%=!" == "!SystemPath!" (
     %SystemRoot%\System32\setx.exe PATH "!SystemPath!%Separator%%PathToAdd%" /M 
    ) 
) 
endlocal 
endlocal 

. 또한 문제의 배치 코드가 왜 전혀 좋지 않은지 설명합니다.

참고 : 명령 SETX은 기본적으로 Windows XP에서 사용할 수 없습니다.

사용 된 명령과 그 작동 방법을 이해하려면 명령 프롬프트 창을 열고 다음 명령을 실행하고 각 명령에 대해 표시된 모든 도움말 페이지를 모두주의 깊게 읽어야합니다.

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • reg /?reg query /?
  • set /?
  • setlocal /?
  • setx /?
관련 문제