如果条件总是返回 False

if condition always returning False

我正在编写 脚本。该脚本包含一个设置环境变量的函数。函数如下:

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 条件总是 returns False.

以下是 $pathVar$path 的值。

$pathVar:

C:\Program Files (x86)\MATLAB\R2009b\bin\win32;C:\Program Files\TortoiseSVN\bin

$path:

;C:\Program Files\TortoiseSVN\bin

使用通配符解决了我的问题。没有通配符的 -like 运算符比较字符串是否相等,因此总是返回 False

通过如下改变if条件,if条件returnsTrue:

if(-Not ($pathVar -like "*$path*"))
{
   ....
}

如果路径已经包含您要添加的文件夹的子文件夹,则使用通配符或正则表达式匹配进行此类检查会带来误报的风险。最好在分号处拆分环境变量的值,并使用 -contains/-notcontains 运算符检查结果数组是否包含或不包含您要添加的项目:

function SetSvnEnvironmentVariable($path)
{
    $pathVar = [Environment]::GetEnvironmentVariable('Path', 'User')

    if ($pathVar.Split(';') -notcontains $path))
    {
        $pathVar += ";$path"
        [Environment]::SetEnvironmentVariable('Path', $pathVar, [EnvironmentVariableTarget]::User)
    }
}

请注意,$path 不应使用前导(或尾随)分号指定。