如果条件总是返回False

时间:2015-09-03 03:38:23

标签: 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

2 个答案:

答案 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*"))
{
   ....
}
相关问题