1

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

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 很陌生,而且启动起来很累,所以也许这就是为什么我不明白为什么这不起作用。这个怎么做?

4

1 回答 1

1

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

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

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

所以你以这个结束

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

整个命令

Get-Item -Path ($AppDir + "reports\*.dbf") | Where-Object {$_.Name -notmatch "^reports.*|^category.*"}
于 2013-07-24T20:27:00.083 回答