我正在尝试替换文件夹内所有文件中的多个字符串。问题是 -replace 运算符没有考虑我需要替换的确切单词,例如:
我需要替换字符串:
现在,当我运行我的脚本时,它将 RUN 字符串替换为 Run ,这很好,但它也将 RUNMODAL 替换为 RunMODAL 并且它没有考虑我的第二个条件。有什么方法可以指定只考虑完全匹配,或者至少对于每次替换我会指定替换特定字符串时要考虑的字符数?
$AllFiles = Get-ChildItem $FilePath
foreach ($file in $AllFiles) {
(Get-Content $file.PSPath) | ForEach {
$_ -creplace 'RUN', 'Run' `
-creplace 'RUNMODAL', 'RunModal'
} | Set-Content $file.PSPath
}
编辑:
也许更好的例子是:
即使我切换到这些,我也会得到 NEWfield 或 Newfield,我需要 NewField。
\b
在搜索字符串中使用单词边界 ( ) 以确保仅替换完整的单词。而且您不需要嵌套循环。替换运算符可以直接用于列表。
Get-ChildItem $FilePath | ForEach-Object {
(Get-Content $_.FullName) -creplace '\bRUN\b', 'Run' `
-creplace '\bRUNMODAL\b', 'RunModal' `
-creplace '\bFIELD\b', 'NewField' |
Set-Content $_.FullName
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句