我正在尝试选择给定目录中某种类型的所有文件,除了以某些名称开头的文件。为什么这段代码不起作用?
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很新,而且很难开机,所以也许这就是为什么我不明白为什么这不起作用。怎么做?
答案 0 :(得分:1)
我认为-eq
和-ne
匹配给定的字符串,并且不支持通配符。
只有-like
支持通配符进行模式匹配。
但是,您可以使用带有-notmatch
开关的正则表达式来实现您想要的效果。由于它现在是正则表达式,因此您需要使用.*
而不是*
。开头标有^
。
所以你以此结束
{$_.Name -notmatch "^reports.*|^category.*"}
整个命令
Get-Item -Path ($AppDir + "reports\*.dbf") | Where-Object {$_.Name -notmatch "^reports.*|^category.*"}