使用-notcontains过滤文件

时间:2016-05-03 17:37:34

标签: .net windows powershell

我正在尝试过滤等于.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

我缺少什么,我该如何解决这个问题?

2 个答案:

答案 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