PowerShell技术问询:检测文件指定静态子串时执行操作
修正PowerShell代码以匹配文件指定位置的子串需求
原代码存在的问题
-filter参数误用:该参数用于过滤文件名,而非文件内容,需改用Where-Object处理内容过滤- 索引错误:PowerShell字符串索引从0开始,第250位对应的起始索引是249,而非250
- 语法逻辑错误:条件判断的写法不符合PowerShell语法规范
- 未处理行长度不足的情况:如果行的字符数少于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'比较
- 先检查行的字符数是否≥254,避免因行太短导致
- 当
$matchingLines不为空(即存在符合条件的行)时,执行后续操作:切换目录(-WhatIf仅模拟操作,实际执行需移除该参数)并输出警告信息
针对示例文件的验证
你的示例文件中第一行满足条件(第250位开始的子串为'05032'),第二行不满足,因此运行修正后的代码会触发Set-Location和Write-Warning操作。
内容的提问来源于stack exchange,提问作者Michele83
相关产品推荐
相关产品推荐

