【发布时间】:2020-08-10 16:56:23
【问题描述】:
我在尝试过滤设置在环境变量数组中的目录列表时遇到了意外行为。
当我使用局部变量运行这段代码时,我得到了预期的结果:
$myPath = "C:\temp\"
$myList = 'Folder1', 'Folder2', 'Folder3'
Write-Host "myList: $myList"
Get-ChildItem -Recurse $myPath | Where-Object { $_.PSIsContainer } | Where-Object { $_.Name -in $myList } | Select-Object FullName
即
myList: Folder1 Folder2 Folder3
FullName
--------
C:\temp\Folder1
C:\temp\Folder2
C:\temp\Folder3
但是,当我用环境变量 $env:yourList 替换 $myList 时
$myPath = "C:\temp\"
$env:yourList = 'Folder1', 'Folder2', 'Folder3'
Write-Host "yourList: $env:yourList"
Get-ChildItem -Recurse $myPath | Where-Object { $_.PSIsContainer } | Where-Object { $_.Name -in $env:yourList } | Select-Object FullName
Get-ChildItem 的结果为空
yourList: Folder1 Folder2 Folder3
.
从上面的输出中可以看出,$env:yourList 中设置的值与$myList 中设置的值相同,所以 环境变量 有什么特别之处可以处理它们Where-Object 标准有什么不同?
顺便说一句,使用-Include 而不是Where-Object 时会发生相同的行为,即:
Get-ChildItem -Path $myPath -Recurse -Include $env:yourList -Directory
【问题讨论】:
标签: powershell environment-variables get-childitem