我想为我使用批处理文件编写的工具设置PATH
。但是如果我要添加的路径已经包含在String
中,我只想修改它。我认为我的语法错误,因为我无法让它工作。
@setlocal enableextensions enabledelayedexpansion
@echo off
set MinGWmsys="%CD%\tools\MinGW\msys\1.0\bin;"
set MinGWbin="%CD%\tools\MinGW\bin;"
set SDCCbin="%CD%"\tools\SDCC\bin;"
set lpath="%PATH%"
if not x%lpath:%MinGWmsys%=% == x%lpath% (
echo PATH already contained %MinGWmsys%
) else (
echo Adding %MinGWmsys% to PATH
setx PATH "%MinGWmsys%;%PATH%"
)
if not x%lpath:%MinGWbin%=% == x%lpath% (
echo PATH already contained %MinGWbin%
) else (
echo Adding %MinGWbin% to PATH
setx PATH "%MinGWbin%;%PATH%"
)
if not x%lpath:%SDCCbin%=% == x%lpath% (
echo PATH already contained %SDCCbin%
) else (
echo Adding %SDCCbin% to PATH
setx PATH "%SDCCbin%;%PATH%"
)
endlocal
请问有人在这帮助我吗?
答案 0 :(得分:1)
x%lpath:%MinGWmsys%=%
被解析为两个变量:%lpath:%
和%=%
,保留字符串inGWmsys
不变。尝试:
echo x%lpath:%MinGWmsys%=%
你会看到它。
相反,你应该使用
if not "!lpath:%MinGWmsys%=!" == "%lpath%" (
以便在%variable%
之前插入!another:value=!
(改编自this post)。我使用了引号而不是x
,因为即使在插入变量之前,if
似乎(错误地)解释=!
。
第二个问题是引号:
set MinGWmsys="%CD%\tools\MinGW\msys\1.0\bin;"
应该是
set MinGWmsys=%CD%\tools\MinGW\msys\1.0\bin;
因为很明显,您的路径不包含带引号的字符串"%CD%\tools\MinGW\msys\1.0\bin;"
。
这有效:
@setlocal enableextensions enabledelayedexpansion
@echo off
set MinGWmsys=%CD%\tools\MinGW\msys\1.0\bin;
set lpath=%PATH%
if not "!lpath:%MinGWmsys%=!" == "%lpath%" (
echo PATH already contained %MinGWmsys%
) else (
echo Adding %MinGWmsys% to PATH
setx PATH "%MinGWmsys%;%PATH%"
)
endlocal