如何从 c:\users 中的 gci -recurse 中排除目录

问题描述 投票:0回答:2

我试图从

gci -recurse
输出中排除“AppData”和“Application Data”目录,但它不起作用:

PS C:\Users> gci -Force -Dir -R 2>$null | ? { ( $_.Name -notLike 'AppData' ) -and ( $_.Name -notLike 'Application Data' ) } | % FullName | sls appdata | select -f 10

C:\Users\Default\AppData\Local
C:\Users\Default\AppData\Roaming
C:\Users\Default\AppData\Local\Barco
C:\Users\Default\AppData\Local\Historique
C:\Users\Default\AppData\Local\History
C:\Users\Default\AppData\Local\Microsoft
C:\Users\Default\AppData\Local\Temp
C:\Users\Default\AppData\Local\Temporary Internet Files
C:\Users\Default\AppData\Local\Barco\ClickShare App
C:\Users\Default\AppData\Local\Barco\ClickShare App\cache


PS C:\Users>

我也尝试过测试

$_.FullName
的值,但它也不起作用。

我期望除

Appdata
(或
Application Data
)目录之外的任何目录。

powershell get-childitem
2个回答
0
投票

先排除顶层目录的名称,然后递归结果。您可以通过管道返回 get-childitem。

gci -Force -Dir | 
  ? { $_.Name -ne 'AppData' -and $_.Name -ne 'Application Data' } | 
  gci -force -dir -R

或 - 从字面上排除:

# also Cookies,'Local Settings','My Documents',NetHood,PrintHood,Recent,SendTo,
# 'Start Menu',Templates
gci -Force -Dir -exclude AppData,'Application Data' | gci -force -dir -R

或者实际使用通配符:

gci -Force -Dir -R | 
  ? { $_.FullName -notlike '*AppData*' -and 
  $_.FullName -notlike '*Application Data*' } 

0
投票

检查

FullName
上的匹配将删除目录。
-notmatch
运算符使用正则表达式。

Get-ChildItem -Force -Directory -Recurse -ErrorAction SilentlyContinue |
    Where-Object { $_.FullName -notmatch '\\AppData\\' -and $_.FullName -notmatch '\\Application Data\\'} |
    Select-Object -ExpandProperty FullName
© www.soinside.com 2019 - 2024. All rights reserved.