我正在尝试进一步使用我在尝试replace text at a specified line时找到的一段精彩代码。
然而,试图让它阅读$_.Substring()
然后使用$_ -replace
给我带来麻烦;虽然我没有收到任何错误消息,但文本没有被替换。
以下代码不起作用:
$content = Get-Content Z:\project\folder\subfolder\newindex2.html
$content |
ForEach-Object {
if ($_.ReadCount -ge 169 -and $_.ReadCount -le 171) {
$a = $_.Substring(40,57)
$linked = '<a href="http://tempsite.info/folder1/folder2/' + $a + '">' + $a + '</a>'
$_ -replace $a,$linked
} else {
$_
}
} |
Set-Content Z:\project\folder\subfolder\newindex2.html
重点是使html表格列中的单元格内容链接到网络服务器上的文件,其名称与单元格中的名称相同。
我尝试匹配文件名时没有运气尝试正则表达式,但是因为我设法做到这一点所以要替换的文本总是在同一个位置,我我想我会替换位置替换。 要替换的文本总是长度为57个字符,始终从位置40开始。
我查看了设置的变量,除了
之外,所有内容都设置正确$_ -replace $a,$linked
不会取代任何东西。 相反,整个文件只是重新编写而没有任何改变。任何人都可以指出我缺少的东西和/或指出如何更容易达到结果?也许我使用了Substring错误并且应该使用别的东西?
答案 0 :(得分:1)
-replace
右侧参数中的第一项是正则表达式模式,因此根据子字符串包含的内容,某些字符可能是正则表达式控制字符。
你可以逃脱它:
$_ -replace $([regex]::Escape($a)),$linked
或者使用String.Replace()
方法,该方法不使用正则表达式:
$_.Replace($a,$linked)
最后,正如@Matt指出的那样,您可能想要完全避免使用查找和替换方法,因为您已经知道需要插入新值的字符索引:
$_.Remove(40,57).Insert(40,$linked)