2016-12-29 1 views
1

мне нужно изменить C: \ Program Files (x86) в C: \ Progra ~ 2 в системной переменной пути. Я думал сделать это с Powershell, поэтому я придумал следующий сценарий.Заменить строку в системном пути с 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 

Может ли кто-нибудь помочь мне с этим?

+0

'$ OldValue = $ {Pogram Files (x86)}' -> '$ OldValue = "Program Files (x86)" '? – sodawillow

+0

Я изначально использовал это значение, но это не сработало из-за(). Мне пришлось использовать $ {}, потому что() был интерпретирован как часть команды. – Ricardo

+0

Ах да, '-replace' использует регулярные выражения, вам нужно избежать появления парсеров:' $ OldValue = "Program Files \ (x86 \)" '. – sodawillow

ответ

0
$OldValue = ${Program Files (x86)} 

следует заменить

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

обратную косую черту \ бежать в круглые скобки интерпретируются как regex по -replace

Смежные вопросы