所需的搜索说明:
Any string that contains either v2 or v3 (case insensitive)
我试图使用Directory.GetDirectories(path,searchPattern)找到子目录路径,我打算为searchPattern参数提供正则表达式模式,但显然,searchPattern不能是正则表达式。
有没有其他好的方法来过滤包含v2或v3的文件名?
答案 0 :(得分:3)
如果您想使用正则表达式并避免多次扫描目录列表(以减少必要的IO操作量),您可以这样做:
var baseDir = "C:\\YourDirectory\\";
// Replace with your own Regex.
var dirNames = new Regex("v2|v3", RegexOptions.Compiled | RegexOptions.IgnoreCase);
var dirsFiltered =
Directory.EnumerateDirectories(baseDir).Where(dir => dirNames.IsMatch(dir)).ToArray();
答案 1 :(得分:1)
Directory.GetDirectories
不支持正则表达式,因此您无法使用它。
我会改用它:
foreach (string dir in Directory.GetDirectories(baseDir, "*v2*")
.Concat(Directory.GetDirectories(baseDir, "*v3*"))
)
{
}
答案 2 :(得分:0)
searchPattern字符串
要与名称匹配的搜索字符串 目录。此参数可以包含有效的组合 文字路径和通配符(*和?),但不支持 正则表达式。
一个过滤器:
Import-Module JAMS
$MyEntry = Get-JAMSEntry -Entry <<JAMS_NOTIFY_JAMS_ENTRY>>
$FQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
Set-Location -Path "C:\Program Files\Zabbix Agent"
foreach ($a in $MyEntry.AuditTrail) {
Write-Host $a.Message
if ($a.Message.StartsWith("Sending")) {
$Status = "0"
Write-Host "Sending Data to Zabbix Item"
Write-Host "Server: " $FQDN
Write-Host "Status: " $Status
.\zabbix_sender.exe -vv -c "C:\Program Files\Zabbix Agent\zabbix_agentd.conf" -s $FQDN -k app.jams.server.email -o $Status
}
else {
}
}
多个过滤器:
DirectoryInfo di = new DirectoryInfo(@"d:\sources\");
DirectoryInfo[] dirs = di.GetDirectories("*my filter*");