用Powershell替换系统路径中的字符串

时间:2016-12-29 10:01:13

标签: windows powershell path set

我需要在系统路径变量的 C:\ Progra~2 中更改 C:\ Program Files(x86)。我想用Powershell做这件事,所以我提出了以下脚本。

$NewPath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path

$OldValue = ${Program Files (x86)}
$NewValue = "Progra~2"

$NewPath = $NewPath -replace $OldValue, $NewValue

Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH –Value $newPath

$NewPath

遗憾的是,输出并非我的预期。

Progra~2oProgra~2mProgra~2eProgra~21Progra~2\Progra~2oProgra~2pProgra~2mProgra~2nProgra~2\Progra~2bProgra~2iProgra~2nProgra~2;Progra~2CProgra~2:
Progra~2\Progra~2OProgra~2rProgra~2aProgra~2cProgra~2lProgra~2eProgra~2\Progra~2MProgra~2iProgra~2dProgra~2dProgra~2lProgra~2eProgra~2wProgra~2a

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

$OldValue = ${Program Files (x86)}

应替换为

$OldValue = "Program Files \(x86\)"

反斜杠\逃脱被regex

解释为-replace的parens