从get-childitem中省略多个目录

时间:2014-09-17 22:25:22

标签: regex powershell match get-childitem

找到这个主题:Exclude multiple subfolders while using Powershell's method Get-Childitem 并设法使用给定的参数对其进行测试,它似乎正常运行,因此我非常确定我使用的语法是正确的。但是,很明显,根据我的参数,它并不适合我。

在这里将所有内容都删除为两条相关的行:

$ExcludeDirs = @('$RECYCLE.BIN','Temporary ASP.NET Files','Temporary Internet Files','Temp','System Volume Information','RECYCLER')
gci -Path T:\ -Force -Recurse | Where {!($ExcludeDirs -match [regex]::escape($_.Fullname))}

这是输出中的前几行:

PS C:\Users\Angelo Mileto> $ExcludeDirs = @('$RECYCLE.BIN','Temporary ASP.NET Files','Temporary Internet Files','Temp','System Volume Information','RECYCLER')
gci -Path T:\ -Force -Recurse | Where {!($ExcludeDirs -match [regex]::escape($_.Fullname))}

Directory: T:\
Mode                LastWriteTime     Length Name                                                                                                                      
----                -------------     ------ ----                                                                                                                      
d--hs        12/22/2013   4:57 PM            $RECYCLE.BIN                                                                                                              
d----        07/15/2012   2:19 PM            DropBox.Dir                                                                                                               
d----        12/09/2010   7:18 PM            ftproot                                                                                                                   
d----        07/27/2012   5:52 PM            GNS3                                                                                                                      
d----        08/16/2014   3:44 PM            New folder                                                                                                                
d----        05/10/2012   7:33 AM            ProgramData                                                                                                               
d--hs        04/13/2012   7:48 PM            RECYCLER                                                                                                                  
d----        03/10/2010   6:25 PM            SEP                                                                                                                       
d--hs        12/28/2012   5:42 PM            System Volume Information                                                                                                 
d----        08/08/2012   7:33 PM            Temp                                                                                                                      
d---s        03/12/2014   4:57 PM            Temporary Internet Files                                                                                                  
d----        09/24/2013   5:24 PM            VMWare_8.Dir                                                                                                              
d----        06/07/2008   7:06 AM            WINDOWS                                                                                                                   
-a---        08/18/2013  12:48 AM          0 Cleanup_T                                                                                                                 
-a---        12/15/2012   8:01 AM         68 Cleanup_T.txt                                                                                                             
-a---        03/14/2014   7:28 PM   24761548 Data_Hash1.txt                                                                                                            
-a---        03/14/2014   8:12 PM   24761548 Data_Hash2.txt                                                                                                            
-a---        09/24/2013   5:21 PM       3923 NewFolder.reg                                                                                                             
-a-hs        09/14/2014   2:02 AM 1717879193 pagefile.sys                                                                                                              
                                           6                                                                                                                           
-a---        09/24/2013   5:17 PM  335484316 Registry_BU.reg                                                                                                           
-a---        08/17/2014  11:58 AM       1020 TempHash.txt                                                                                                              
-a---        09/13/2014   6:29 PM      57466 VM_Hash1.txt                                                                                                              
-a---        08/17/2014  12:49 PM          0 VM_Hash2.txt                                                                                                              


Directory: T:\$RECYCLE.BIN
Mode                LastWriteTime     Length Name                                                                                                                      
----                -------------     ------ ----                                                                                                                      
d--hs        04/28/2012   7:57 AM            S-1-5-18                                                                                                                  
d--hs        04/15/2012  12:01 PM            S-1-5-21-2447911456-218057785-4074464323-1000                                                                             
d--hs        05/07/2012   5:31 PM            S-1-5-21-3003357132-2481200545-788173088-1000                                                                             
d--hs        09/16/2014   7:31 PM            S-1-5-21-3108701050-3840048422-4210986610-1000                                                                            
d--hs        12/22/2013   4:57 PM            S-1-5-21-3108701050-3840048422-4210986610-1013                                                                            
d--hs        08/12/2012   7:00 AM            S-1-5-21-3201584925-4004853213-4110546137-1000                                                                            
d--hs        04/16/2012   8:10 PM            S-1-5-21-3464201764-390295408-3614804669-1000                                                                             
d--hs        12/15/2012   7:43 PM            S-1-5-21-3742232801-2663128855-664334430-1000                                                                             

    Directory: T:\$RECYCLE.BIN\S-1-5-18
Mode                LastWriteTime     Length Name                                                                                                                      
----                -------------     ------ ----                                                                                                                      
-a-hs        04/28/2012   7:57 AM        129 desktop.ini                                                                                                               

    Directory: T:\$RECYCLE.BIN\S-1-5-21-2447911456-218057785-4074464323-1000
Mode                LastWriteTime     Length Name                                                                                                                      
----                -------------     ------ ----                                                                                                                      
-a-hs        04/15/2012  12:01 PM        129 desktop.ini                                                                                                               

    Directory: T:\$RECYCLE.BIN\S-1-5-21-3003357132-2481200545-788173088-1000
Mode                LastWriteTime     Length Name                                                                                                                      
----                -------------     ------ ----                                                                                                                      
-a-hs        05/07/2012   5:31 PM        129 desktop.ini                                                                                                               

    Directory: T:\$RECYCLE.BIN\S-1-5-21-3108701050-3840048422-4210986610-1000

显然,你可以看到我的ExcludeDirs变量中的第一项是$ RECYCLE.BIN - 是的,意识到它对于这个函数不区分大小写,但希望尽可能保持精确。

所以问题是,为什么它不起作用或者我对使用-match缺少什么?

总体目标是最终得到给定驱动器/目录树上的所有文件的列表,然后我可以对其进行操作但是我想省略一直在更改的内容(即临时目录等)获取系统和隐藏文件的列表。

谢谢!

1 个答案:

答案 0 :(得分:1)

所以这就是我要做的事情。你有你的数组,-match实际上是为字符串而不是数组而设计的,所以让我们将你的数组转换为正则表达式匹配字符串。我们将通过[RegEx]::Escape()运行每个项目,并使用|加入它们并将它全部包装在括号中:

$RegExExclude = "((?<=\\)$(($ExcludeDirs |ForEach{[regex]::escape($_)}) -join "(?=\\|$)|(?<=\\)")(?=\\|$))"

现在它以字符串形式出现:

(\$RECYCLE\.BIN|Temporary\ ASP\.NET\ Files|Temporary\ Internet\ Files|Temp|System\ Volume\ Information|RECYCLER)

然后我们就像这样对你的GCI工作:

$ExcludeDirs = @('$RECYCLE.BIN','Temporary ASP.NET Files','Temporary Internet Files','Temp','System Volume Information','RECYCLER')
$RegExExclude = "((?<=\\)$(($ExcludeDirs |ForEach{[regex]::escape($_)}) -join "(?=\\|$)|(?<=\\)")(?=\\|$))"
gci -Path T:\ -Force -Recurse | Where {!($_.FullName -match $RegExExclude)}

修改:按照briantist的建议更新,这是一个很好的建议。