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

PowerShell实现findstr等效功能:筛选今日文件并匹配文本

PowerShell 脚本实现指定文件内容查找(替代findstr)

完整解决脚本

# 定义今日时间范围:覆盖今日00:00:00到23:59:59的所有文件
$todayStart = (Get-Date).Date
$todayEnd = $todayStart.AddDays(1)

# 筛选目标文件:C:\Temp下以Filename1开头、今日修改的文件
$targetFiles = Get-ChildItem -Path "C:\Temp" -Filter "Filename1*" -File | 
    Where-Object { $_.LastWriteTime -ge $todayStart -and $_.LastWriteTime -lt $todayEnd }

# 遍历文件,查找同时包含两个指定字符串的行(与需求匹配),输出格式对齐findstr
foreach ($file in $targetFiles) {
    Get-Content -Path $file.FullName | 
        # 用-like做精确字符串匹配(等效findstr /C参数),避免正则特殊字符干扰
        Where-Object { $_ -like "*Firmware version text*" -and $_ -like "*Class::Method1*" } |
        ForEach-Object { Write-Output "$($file.Name): $_" }
}

针对之前问题的修正说明

  1. 日期筛选不准确问题

    • 错误原因:直接用LastWriteTime -eq (Get-Date).Date只会匹配刚好在今日0点整修改的文件,忽略了带时分秒的修改时间。
    • 修正方案:通过时间范围判断(-ge 今日0点且-lt 明日0点),覆盖今日所有时间段修改的文件。
  2. 内容匹配错误问题

    • 如果用-match默认是正则匹配,Class::Method1中的::是正则特殊字符,会导致匹配异常;改用-like或Select-String -SimpleMatch可以实现精确字符串匹配,和findstr的行为完全一致。
    • 若需要等效findstr默认的「任意匹配其中一个字符串」,只需把-and替换为-or。

简化版(用Select-String)

如果追求更简洁的写法,可以用Select-String直接处理文件和匹配:

$todayStart = (Get-Date).Date
$todayEnd = $todayStart.AddDays(1)

Get-ChildItem -Path "C:\Temp" -Filter "Filename1*" -File |
    Where-Object { $_.LastWriteTime -ge $todayStart -and $_.LastWriteTime -lt $todayEnd } |
    Select-String -SimpleMatch -Pattern "Firmware version text", "Class::Method1" |
    # 若需同时包含两个字符串,添加以下Where-Object过滤
    # Where-Object { $_.Matches.Count -eq 2 } |
    ForEach-Object { Write-Output "$($_.Filename): $($_.Line)" }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:17:17