如何从路径数组中删除具有特定文件扩展名的文件路径?

时间:2015-02-18 18:30:32

标签: arrays powershell powershell-v2.0 filepath

我有一个包含多个文件路径的数组,有多个文件扩展名:

$Array = @("C:\aaa\aaa\abc.txt", "C:\aaa\aaa\bbb.txt", "C:\aaa\aaa\abc.c", "C:\aaa\aaa\abc.h", ...etc)

现在,我想删除所有扩展名为.txt的文件路径并执行以下操作:

$Array | Foreach {$_ | Where {$_ -notlike "*.txt"}}

它会删除.txt文件路径。

由于我还是Powershell的新手,我想知道这是否是正确的方法,或者是否有更好的解决方案(例如,它没有使用Foreach语句)。

1 个答案:

答案 0 :(得分:1)

您实际上并不需要Foreach-Object。只需将数组直接传送到Where-Object

PS > $Array = @("C:\aaa\aaa\abc.txt", "C:\aaa\aaa\bbb.txt", "C:\aaa\aaa\abc.c", "C:\aaa\aaa\abc.h")
PS > $Array | Where {$_ -notlike "*.txt"}
C:\aaa\aaa\abc.c
C:\aaa\aaa\abc.h
PS > 

当然,在这种情况下,你可以在数组本身上使用-notlike

PS > $Array -notlike "*.txt"
C:\aaa\aaa\abc.c
C:\aaa\aaa\abc.h
PS >

这是因为所有PowerShell的比较运算符都适用于标量和集合。来自documentation

  

当运算符的输入是标量值时,比较运算符       返回一个布尔值。当输入是值的集合时,       比较运算符返回任何匹配值。如果没有比赛       在集合中,比较运算符不会返回任何内容。