- 错误地返回True

时间:2018-04-13 12:49:57

标签: powershell

我的期望是显示的代码会返回False,但我实际上为$ taskVars中的每个键获得了一个True。

$source = 'C:\Assets\_Px Tools\Tasks\Move_Ex\Source\$(fileName).txt'
$taskVars = @{
    fileName = '[PxFileName]'
    fileDate = '[PxFileDate]'
    fileTime = '[PxFileTime]'
    fileDateTime = '[PxFileDateTime]'
}

$foundTaskVar = $false
foreach ($var in $taskVars.keys) {

    Write-Host "*$($taskVars.$var)*"
    if ($source -like "*$($taskVars.$var)*") {
        $foundTaskVar = $true
        Write-Host "$($taskVars.$var)!"
    }
}

我在那里有一些Write-Hosts来验证变量的内容,搜索条件和预期的一样,对于我的生活,我看不出为什么有什么东西会返回$ true,什么都不说。

$source = 'C:\Assets\_Px Tools\Tasks\Move_Ex\Source\[PxFileName].txt'

应该返回true,但不是

$source = 'C:\Assets\_Px Tools\Tasks\Move_Ex\Source\$(fileName).txt'

1 个答案:

答案 0 :(得分:3)

变量中的方括号对-like具有特殊含义。它认为你希望它匹配括号内的任何字符(例如'p'或'x'或......)。如果你用反引号(`)来逃避第一个括号,我想你会得到你想要的东西:

$taskVars = @{
    fileName = '`[PxFileName]'
    fileDate = '`[PxFileDate]'
    fileTime = '`[PxFileTime]'
    fileDateTime = '`[PxFileDateTime]'
}

在帮助中获取更多信息:

about_Wildcards

顺便说一句,我认为散列表对于你在这里所做的事情来说有点过分。一个简单的数组也可以正常工作。