【发布时间】:2022-01-31 20:02:35
【问题描述】:
使用正则表达式在 get-childitem 中递归 -notmatch
我正在尝试使用以下代码查找一些具有设置扩展名的文件。
$include = @('*.keystore', '*.cer', '*crt', '*pfx', '*jks', '*.ks')
$exclude = [RegEx]'^C:\\Windows|^C:\\Program Files|^C:\\Documents and Settings|^C:\\Users|\bBackup\b|\bbackup\b|\brelease\b|\breleases\b|\bReleases\b|\bRelease\b'
$trace="trace.txt"
Get-ChildItem "D:\","C:\" -Directory |
where FullName -notmatch $exclude | ForEach {
Get-ChildItem -Path $_.FullName -Include $include -Recurse -Force -EA 0|
Select-Object -ExpandProperty FullName
} *>&1 >> $trace
它有效,但仅在根目录包含其中一种模式时排除。 前任。 不包括 D:\Backup 但包括 D:\something\Backup
有没有办法排除第二个文件夹?
【问题讨论】:
-
也许通配符表达式更适合这个?
-
我看不出你的正则表达式有问题;
'D:\something\Backup' -match $exclude按预期返回$true。 -
另外,如果你明确地构造一个
[regex]实例——而不是将一个字符串传递给-notmatch——你正在创建一个大小写——敏感 i> 正则表达式实例。相比之下,使用字符串会隐式创建一个不区分大小写的实例,这符合 PowerShell 基本不区分大小写的行为;例如'foo' -match 'FOO'返回$true。 -
@mklement0 我有 D:\something\backup\test.jks。以上不排除。但是,不包括 D:\backup。通过创建这 2 个文件夹来测试它。
-
您还需要将
-Recurse添加到firstGet-ChildItem调用中,以便在目录层次结构的每个级别上排除诸如backup之类的文件夹。然而,Theo 的解决方案更简单、更高效。
标签: powershell