使用批处理文件设置环境变量

时间:2014-07-15 09:51:54

标签: windows batch-file

我想为我使用批处理文件编写的工具设置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

请问有人在这帮助我吗?

1 个答案:

答案 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