PowerShell提取txt文件前7个字符时Substring报错该如何解决?
报错原因
- 首先
Get-Content默认读取多行文本文档时会返回字符串数组,直接对数组调用SubString方法时,读取的Length是数组的元素总数而非字符串内容长度,当数组元素数小于7时,$var.length - 7计算结果为负数,直接触发索引越界报错。 - 你的代码逻辑是取末尾7位字符,和你要提取前7位的需求完全相反。
- 内容中多余的空格也会影响计算:如果处理的字符串实际长度小于7,
长度-7的计算结果也会是负数,触发同类型报错。
正确实现方案
场景1:逐行提取每行的前7个字符
适用于需要单独处理文件内每一行内容的场景:
# 声明空数组存储处理结果 $results = @() Get-Content "c:\temp\file.txt" | ForEach-Object { # 去掉当前行首尾所有空白字符(空格、换行符、制表符等) $trimmedLine = $_.Trim() # 跳过空行避免报错 if (-not [string]::IsNullOrEmpty($trimmedLine)) { # 取前7位,用Math.Min适配长度不足7的场景,避免索引越界 $currentResult = $trimmedLine.Substring(0, [Math]::Min(7, $trimmedLine.Length)) $results += $currentResult # 直接输出当前行结果 $currentResult } } # 所有结果都存在$results变量中可直接调用
场景2:提取整个文件全部内容的前7个字符
适用于需要把整个文件当作单个字符串处理的场景:
# 加-Raw参数将整个文件读取为单个字符串 $rawContent = Get-Content "c:\temp\file.txt" -Raw # 去掉内容首尾所有空白,不需要可删除.Trim() $trimmedContent = $rawContent.Trim() # 取前7位 $result = $trimmedContent.Substring(0, [Math]::Min(7, $trimmedContent.Length)) $result
内容的提问来源于stack exchange,提问作者Q7777777
相关产品推荐
相关产品推荐

