我正在尝试过滤等于.config
的文件扩展名,文件名在名称中不包含vshost,因此我运行此脚本:
$files = dir
foreach($file in $files) {
if($file.Name -notcontains 'vshost' -and $file.Extension -eq '.config') {
Write-Host $file;
}
}
但输出仍包含名称为vshost
的文件:
foo.exe.config
foo.vshost.exe.config
foo2.vshost.exe.config
预期输出为:
foo.exe.config
我缺少什么,我该如何解决这个问题?
答案 0 :(得分:4)
-notcontains
用于查找数组中的项目,例如。 $array -notcontains $singleitem
。您需要使用-notlike
或-notmatch
(正则表达式)。实施例
if($file.Name -notlike '*vshost*' -and $file.Extension -eq '.config') {
或
if($file.Name -notmatch 'vshost' -and $file.Extension -eq '.config') {
答案 1 :(得分:3)
-contains/-notcontains
用于检查列表是否包含元素。您可以使用-like / -notlike
或-match
运算符。
在您的示例中,您可以使用
$files = dir
foreach($file in $files) {
if($file.Name -notlike '*vshost*' -and $file.Extension -eq '.config') {
Write-Host $file;
}
}
可以找到参考here