Как заменить строку в кавычках и скобках в файле с помощью Powershell - PullRequest
0 голосов
/ 06 мая 2020

Как с помощью PowerShell заменить строку, содержащую кавычки и скобки в файле?

У меня есть файл с настройками c: \ app \ settings. js

app_set("safe.mode", true);
app_set("api.uri", "https://apiurl.com");
app_set("api.version", 1);

И скрипт ChangeSettins.ps1, но на самом деле он не меняет строки в файле.

$SettingsFile = c:\app\settings.js

$SAFEMODE = 'app_set("safe.mode", true);'
$APIURI = 'app_set("api.uri", "https://apiurl.com");'
$APIVERSION = 'app_set("api.version", 1);'

$SAFEMODE_PROFILE = Get-Content $SettingsFile | Select-String -Pattern "safe.mode"
#$SAFEMODE_PROFILE

$APIURI_PROFILE = Get-Content $SettingsFile | Select-String -Pattern "api.uri"
#$APIURI_PROFILE

$APIVERSION_PROFILE = Get-Content $SettingsFile | Select-String -Pattern "api.version"
#$APIVERSION_PROFILE

If ("$SAFEMODE_PROFILE" -eq "$SAFEMODE") {   
    Write-Host "safe mode is enabled"

}  

Else {
    Write-Host "enabling safe mode"
    (Get-Content $SettingsFile) | Foreach-Object { $_ -Replace "$SAFEMODE_PROFILE", "$SAFEMODE" } | Set-Content $SettingsFile

} 

If ("$APIURI_PROFILE" -eq "$APIURI") {   
    Write-Host "uri is correct"

}  

Else {
    Write-Host "updating uri"
    (Get-Content $SettingsFile) | Foreach-Object { $_ -Replace "$APIURI_PROFILE", "$APIURI" } | Set-Content $SettingsFile

} 

If ("$APIVERSION_PROFILE" -eq "$APIVERSION") {  
    Write-Host "api version is 1"

}

Else {
    Write-Host "changing api version to 1"
    (Get-Content $SettingsFile) | Foreach-Object { $_ -Replace "$APIVERSION_PROFILE", "$APIVERSION" } | Set-Content $SettingsFile
} 

1 Ответ

0 голосов
/ 07 мая 2020

Оператор замены

Оператор -replace заменяет все или часть значения указанным значением с помощью регулярных выражений .

Примените метод Regex.Escape (String) там, где это необходимо, например, следующим образом:

$_ -Replace [regex]::Escape("$APIURI_PROFILE"), "$APIURI"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...