如何选择给定文件类型的所有文件除了与名称模式匹配的文件?

时间:2013-07-24 20:06:40

标签: powershell-v2.0

我正在尝试选择给定目录中某种类型的所有文件,除了以某些名称开头的文件。为什么这段代码不起作用?

PS C:\Documents and Settings\wdennis> Get-Item -Path ($AppDir + "reports\*.dbf") | Where-Object {$_.Name -ne "reports*" -or "category*"}

    Directory: C:\Program Files\Application\reports

Mode                LastWriteTime     Length Name                                                                                                                                                                                                                  
----                -------------     ------ ----                                                                                                                                                                                                                  
-----          1/4/2007   9:37 AM       4842 category.dbf                                                                                                                                                                                                          
-----          9/7/2007   1:53 PM      43903 reports.dbf     

我对PS很新,而且很难开机,所以也许这就是为什么我不明白为什么这不起作用。怎么做?

1 个答案:

答案 0 :(得分:1)

我认为-eq-ne匹配给定的字符串,并且不支持通配符。

只有-like支持通配符进行模式匹配。

但是,您可以使用带有-notmatch开关的正则表达式来实现您想要的效果。由于它现在是正则表达式,因此您需要使用.*而不是*。开头标有^

所以你以此结束

{$_.Name -notmatch "^reports.*|^category.*"}

整个命令

Get-Item -Path ($AppDir + "reports\*.dbf") | Where-Object {$_.Name -notmatch "^reports.*|^category.*"}