为文件中的每一行拉一个子字符串

时间:2014-07-31 15:45:57

标签: powershell foreach substring

使用Powershell,我只是试图从任何以6开头的记录的第37个位置开始拉15个字符。我想循环并为每个实例生成一个记录,以便以后可以放入到输出文件。但我似乎没有达到正确的语法只是为了返回15个字符,我知道我错过了一些明显的东西。已经有一段时间了。这是我的剧本:

$content = Get-Content -Path .\tmfhsyst*.txt | Where-Object { $_.StartsWith("6") }

foreach ($line in $contents) 
{
  $val102 = $line.substring(36,15)
}

write-output $val102

2 个答案:

答案 0 :(得分:0)

就像Bill_Stewart指出的那样,你需要在ForEach循环中移动你的Write-Output行。一个可能更好的方法就是管道它:

Get-Content -Path .\tmfhsyst*.txt | Where-Object { $_.StartsWith("6") } | foreach{$_.substring(36,15)}

这应该可以为您提供所需的输出。

答案 1 :(得分:0)

使用Substring()的缺点是,如果字符串比起始索引+子字符串长度短,则会引发错误。您可以使用正则表达式匹配来避免这种情况:

(Get-Content -Path .\tmfhsyst*.txt) -match '^6.{35}(.{15})' | % { $matches[1] }