【发布时间】:2018-08-24 10:10:09
【问题描述】:
我读取了一个 xml 文件并想替换三个字符串。
我的代码:
foreach ($file in Get-ChildItem $files){
(Get-Content $file) | Foreach-Object {
$_ -replace 'TABLE_NAME="\$ZoneProdukt\$', ('TABLE_NAME="' + $ZONPRODLANG)`
-replace 'OPTION="Copy" ', '' `
-replace ('<JOB ','<JOB TIMETO="TEST" ') | ? {$_ -notlike "*TIMETO=`""}
} | Set-Content ($destination_folder + $file.name)
}
最后一次替换只提供了一半的结果 期待。
如果有包含“JOB”和“TIMETO”的行,它们将不会显示(因为Where-Object)
如果提到的“TIMETO”属性已经存在,如何保持行?
例子:
文件中的源代码行(没有“TIMETO”):
<JOB JOBISN="30" USER="testuser">
正确替换:
<JOB TIMETO="TEST" JOB JOBISN="30" USER="testuser">
....
....
文件中的源代码行(带有“TIMETO”):
<JOB JOBISN="30" USER="testuser" TIMETO="0400">
replace -> 这行不会显示!!
..
提前致谢!兄弟丹尼尔
【问题讨论】:
-
用括号括起来整个
-replace逻辑。或者更好的是,使用.Replace()字符串方法,因为你没有对正则表达式做任何特别的事情。 -
@AnsgarWiechers 我永远不会反对该帖子的链接。
-
@Ansgar Wiechers - 为什么不呢?因为性能影响?
-
@TheIncorrigible 我发布的代码只是整个替换的一部分 - 还有更多替换包括正则表达式
标签: powershell replace foreach