我的期望是显示的代码会返回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'
答案 0 :(得分:3)
变量中的方括号对-like
具有特殊含义。它认为你希望它匹配括号内的任何字符(例如'p'或'x'或......)。如果你用反引号(`)来逃避第一个括号,我想你会得到你想要的东西:
$taskVars = @{
fileName = '`[PxFileName]'
fileDate = '`[PxFileDate]'
fileTime = '`[PxFileTime]'
fileDateTime = '`[PxFileDateTime]'
}
在帮助中获取更多信息:
顺便说一句,我认为散列表对于你在这里所做的事情来说有点过分。一个简单的数组也可以正常工作。