我有一个包含多个文件路径的数组,有多个文件扩展名:
$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
语句)。
答案 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:
当运算符的输入是标量值时,比较运算符 返回一个布尔值。当输入是值的集合时, 比较运算符返回任何匹配值。如果没有比赛 在集合中,比较运算符不会返回任何内容。