Powershell - 替换文件中的字符串

时间:2017-07-11 15:35:35

标签: string powershell replace

我正在尝试编辑名为prefs.cfg的配置文件的内容。它有两行:

Server.Name "test"
VoIP.Enabled "1"

我试图更换换弦更加舒服,但我似乎一直在搞乱。

我写了一些东西,如果有人能在我的剧本中指出我出错了,我将不胜感激。

$prefs = Get-Content .\prefs.cfg

$prefs | Select-String "Server.Name"

$servername = Read-Host -Prompt "Enter Server Name"

Write-Host $servername

$prefs -replace $servername

$prefs

1 个答案:

答案 0 :(得分:1)

  • 虽然您将$prefs传递给Select-String-replace,但这些操作的结果并未分配给变量。所以你以后不能使用它们。

  • 正在向-replace传递一个参数。它预计有两个:要替换什么,以及用什么来替换它。 编辑:如果提供了单个参数,则将其视为“要替换的内容”。由于没有提供“替换它的内容”,它将被替换为任何内容(即删除)

  • Select-String-replace使用正则表达式。这项任务似乎有点矫枉过正。 Where-Object.Replace完全胜任这项任务。

$prefs = Get-Content .\prefs.cfg

# Get the line using Where. * is wildcard
$oldServerLine = $prefs | Where-object {$_ -like "Server.Name*"}

$servername = Read-Host -Prompt "Enter Server Name"

Write-Host $servername

# Replace old line with new line. ` is the escape character so you get " as expected.
$newPrefs = $prefs.Replace($oldServerLine,"Server.Name `"$servername`"")

$newPrefs

<子> Related: difference between -replace and .Replace