CMD: 경로를 복제하지 않고 경로에 추가하시겠습니까?

CMD: 경로를 복제하지 않고 경로에 추가하시겠습니까?

CMD세션 동안 새 경로를 쉽게 설정할 수 있습니다.SET PATH=%PATH%;"insert custom path here"

배치 파일에서 그렇게 하면 사용자 정의 경로가 이미 포함되어 있는지 여부는 고려되지 않습니다. 중복을 방지하려면 어떻게 해야 합니까(예: PATH "문자열"에 이미 포함되어 있는지 확인).

비고:

  1. 관련된:Windows 7에서 사용자 정의 환경 변수를 시스템 변수 PATH에 어떻게 추가합니까?
  2. 관련된:명령줄을 통해 시스템의 PATH 변수에 항목을 영구적으로 추가하려면 어떻게 해야 합니까?
  3. UNIX에 대한 동일한 질문:$PATH에 디렉터리가 아직 없으면 추가하세요.
  4. 일부 "CMD" 문자열 작업은 다음과 같이 설명되었습니다.http://ss64.com/nt/syntax-replace.html

답변1

MaddHackers 답변과 유사하며 더 컴팩트합니다.
echo %path%|find /i "%np%">nul || set path=%path%;%np%

%np%새로운 경로입니다. 물론 리터럴을 대신 사용할 수도 있습니다. 기능: echo %path%|find /i "%np%">nul기존 경로에서 문자열을 검색하고 출력을 삭제합니다. ||실패 시 실행을 의미하므로 다음을 의미합니다. 추가할 문자열을 경로로 검색하고, 없으면 추가합니다.

편집: 일반적으로 공백이 포함된 경우에도 경로를 인용할 필요는 없지만당신이 그것을 인용하고 싶다면, 이 버전은 큰따옴표로 묶인 경로에서 작동합니다.
echo %path%|find /i "%np:"=%">nul || set path=%path%;%np%

편집: KubaOber가 댓글에서 언급한 대로 일부 시퀀스를 잘못 해석할 수 있도록 findstr /i /c:변경 되었습니다.find /ifindstr

답변2

더럽다는 건 알지만 이렇게 하면 작동합니다.

 SET PATH=$(echo $PATH | awk -F"%checkstr%" '{ print ($(NF-1) ~ 0) ? $PATH:%newpath% : $PATH; }')

%checkstr%PATH에서 확인할 문자열은 어디에 있고 %newpath%현재 PATH에 추가할 새 PATH는 무엇입니까?

도움이 되기를 바라며 더 쉬운 방법이 있을 것이라고 확신합니다. 하지만 지금은 그 방법으로 해결됩니다.

편집하다

따라서 Windows에 UNIX 도구를 추가하지 않으려면 다음 일괄 구문을 사용해 볼 수 있습니다.

echo %PATH% | find /C /I "<string to find>" > out.txt 
set /p dne= < out.txt
if 0 EQU %dne% (set PATH=%PATH%;"<custom path>")
del out.txt

아, 그다지 좋지는 않습니다. 파이프로 연결된 find 명령이 if 문에서 하위 명령으로 작동하도록 할 수 있다면 한 줄로 수행할 수 있습니다...

답변3

"wmz"의 답변을 기반으로 한 스크립트:

@ECHO off
ECHO java_home=%JAVA_HOME%
SET javapath=%JAVA_HOME%\bin
ECHO %path%|findstr /i /c:"%javapath:"=%">nul || set path=%path%;%javapath%
ECHO Path=%path%
PAUSE

답변4

2021년에 업데이트된 답변:

set더 이상 작동하지 않으므로 다음을 사용해야 합니다 setx(약간 다른 구문).

SET mypath=C:\dev\vendor\sass\1.32.4
ECHO %Path%|findstr /i /c:"%mypath:"=%">nul || setx Path "%Path%";%mypath%

관련 정보