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

PowerShell技术问询:检测文件指定静态子串时执行操作

修正PowerShell代码以匹配文件指定位置的子串需求

原代码存在的问题

  1. -filter参数误用:该参数用于过滤文件名,而非文件内容,需改用Where-Object处理内容过滤
  2. 索引错误:PowerShell字符串索引从0开始,第250位对应的起始索引是249,而非250
  3. 语法逻辑错误:条件判断的写法不符合PowerShell语法规范
  4. 未处理行长度不足的情况:如果行的字符数少于254(249+5),调用Substring会抛出异常

修正后的代码

# 读取所有TXT文件的行,过滤出符合条件的行
$matchingLines = Get-Content -Path C:\appoggio\*.TXT | Where-Object {
    # 先判断行长度足够,再截取指定位置的子串进行匹配
    $_.Length -ge 254 -and $_.Substring(249, 5) -eq '05032'
}

# 如果存在符合条件的行,执行指定操作
if ($matchingLines) {
    Set-Location C:\appoggio\prova -WhatIf
    Write-Warning 'ok'
}

代码说明

  • Get-Content -Path C:\appoggio\*.TXT:读取目录下所有TXT文件的内容,按行返回
  • Where-Object块:
    • 先检查行的字符数是否≥254,避免因行太短导致Substring报错
    • 截取从索引249开始的5个字符,与目标字符串'05032'比较
  • 当$matchingLines不为空(即存在符合条件的行)时,执行后续操作:切换目录(-WhatIf仅模拟操作,实际执行需移除该参数)并输出警告信息

针对示例文件的验证

你的示例文件中第一行满足条件(第250位开始的子串为'05032'),第二行不满足,因此运行修正后的代码会触发Set-Location和Write-Warning操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:57:14