我正在写一个powershell-v2.0脚本。该脚本包含一个设置环境变量的函数。功能如下:
function SetSvnEnvironmentVariable($path)
{
# Get the Path environment variable
$pathVar = [Environment]::GetEnvironmentVariable("Path","User")
# Check if path environment variable already contains the path to be added
if(-Not ($pathVar -like $path))
{
$pathVar += $path
[Environment]::SetEnvironmentVariable("Path",$pathVar, [System.EnvironmentVariableTarget]::User)
}
}
$path
变量包含要添加到PATH环境变量的路径。
我面临的问题是,即使$path
是$pathVar
的子字符串,if条件也始终返回False
。
以下是$pathVar
和$path
的值。
$pathVar
:
C:\ Program Files(x86)\ MATLAB \ R2009b \ bin \ win32; C:\ Program Files \ TortoiseSVN \ bin
$path
:
; C:\ Program Files \ TortoiseSVN \ bin
答案 0 :(得分:1)
如果路径已包含要添加的文件夹的子文件夹,则使用通配符或正则表达式匹配进行此类检查会产生误报的风险。最好以分号分割环境变量的值,并使用-contains
/ -notcontains
运算符检查生成的数组是否包含要添加的项:
function SetSvnEnvironmentVariable($path)
{
$pathVar = [Environment]::GetEnvironmentVariable('Path', 'User')
if ($pathVar.Split(';') -notcontains $path))
{
$pathVar += ";$path"
[Environment]::SetEnvironmentVariable('Path', $pathVar, [EnvironmentVariableTarget]::User)
}
}
请注意,$path
不应使用前导(或尾随)分号指定。
答案 1 :(得分:0)
使用通配符修复了我的问题。没有通配符的-like
运算符如果它们相等则比较字符串,因此总是返回False
。
通过更改if
条件,if
条件返回True
:
if(-Not ($pathVar -like "*$path*"))
{
....
}