You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell获取含当日Error文件的根日志目录子文件夹名称

PowerShell脚本:获取符合条件的一级子文件夹名称

你需要的是C:\Errorlogs下的直接子文件夹名称,要求这些子文件夹的子目录中存在当日修改、名称含Error的文件。以下是两种可行的实现方案:

方案一:先遍历一级子文件夹,再检查内部文件

这种方法先定位根目录下的所有直接子文件夹,再逐个检查是否存在符合条件的文件,效率更高(找到一个符合条件的文件就停止当前子文件夹的遍历):

$targetDir = "C:\Errorlogs"

# 获取根目录下的所有直接子文件夹,筛选出包含目标文件的文件夹
Get-ChildItem -Path $targetDir -Directory | Where-Object {
    # 检查当前子文件夹下是否存在当日修改、名称含Error的文件
    $hasValidFile = Get-ChildItem -Path $_.FullName -Recurse -Filter "*Error*" -File -ErrorAction SilentlyContinue -Force |
        Where-Object { $_.LastWriteTime.Date -eq [datetime]::Today.Date } |
        Select-Object -First 1
    $hasValidFile -ne $null
} | Select-Object -ExpandProperty Name

代码说明:

  • Get-ChildItem -Path $targetDir -Directory:仅获取根目录下的直接子文件夹,避免递归遍历所有内容
  • 内部的Get-ChildItem递归查找当前子文件夹下的文件,用Filter筛选名称含Error的文件,再通过Where-Object判断修改日期是否为当日
  • Select-Object -First 1:找到第一个符合条件的文件就停止,减少不必要的遍历
  • 最后提取符合条件的子文件夹的Name属性,得到目标名称

方案二:从符合条件的文件路径中提取一级子文件夹

如果已经找到所有符合条件的文件,也可以从文件路径中拆分出一级子文件夹名称,再去重:

$targetDir = "C:\Errorlogs"

Get-ChildItem $targetDir -Recurse -ErrorAction SilentlyContinue -Force -Filter "*Error*" -File | 
Where-Object { $_.LastWriteTime.Date -eq [datetime]::Today.Date } |
# 拆分文件路径,提取一级子文件夹名称
ForEach-Object {
    # 去掉根目录路径,拆分剩余部分为路径段
    $relativePath = $_.FullName.Substring($targetDir.Length + 1)
    $pathSegments = $relativePath -split '\\'
    $pathSegments[0]
} | Sort-Object -Unique

代码说明:

  • 先通过递归找到所有符合条件的文件
  • 对每个文件的完整路径,去掉根目录部分后拆分路径段,第一个段就是一级子文件夹名称
  • Sort-Object -Unique:确保同一个子文件夹名称只输出一次(避免多个符合条件的文件导致重复输出)

内容的提问来源于stack exchange,提问作者Pankaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:32:27