У меня есть файл конфигурации (test.properties)
Файл включает:
<a>aa</a>
<b>bb</b>
<c>ccc</c>
<d>dddd</d>
<Test>Yes</Test>
Я хочу заменить значение «Нет» в файле test.properties с помощью PowerShell.
Existing : <Test>Nope<Test>
AFter Update it should be
<Test>Yes<Test>
Как я могу заменить это значение с помощью PowerShell?
Используйте замену! Код ниже прочитает содержимое файла и заменит ваш тестовый тег новым значением, а затем запишет содержимое обратно в тот же файл.
(Get-Content yourfile.xml).replace("<Test>Nope<Test>", "<Test>Yes<Test>") | Set-Content yourfile.xml
Np! Затем вы можете использовать интерполяцию строк, попробуйте это так: '<Test> $ ($ value) <Test>'
У меня это не работает: (Комментарий: (Get-Content yourfile.xml) .replace ('<Test> Nope <Test>', '<Test> $ ($ value) <Test>') | Set-Content yourfile. xml, поэтому вывод: <Test> $ value <Test>
@Ukchat значение $ ограничено. Попробуйте использовать $ custValue. Также используйте двойные кавычки "<test> $ ($ custValue) </test>"
Другой способ - использовать оператор -replace
на основе RegEx в отличие от метода .replace()
, который использовал Маркус Хёглунд.
-replace "(?<=<(Test)>).*?(?=</\1)",$custValue
Он не заботится о тексте, который он заменяет, используя непотребляющий оглядки, определяя текст до и после (\ 1 повторяет сгруппированный (Test)
в просмотре вперед).
(get-Content .\test.properties) -replace "(?<=<(Test)>).*?(?=</\1)",$custValue|
set-Content .\test.properties
Кстати, разве закрывающему тегу не предшествует /
?
Спасибо за ваш ответ. Если я хочу установить значение «Да» с помощью параметра, как я могу его установить? Например, у меня есть параметр $ value = 'Yes', и я хочу установить как <Test> $ value <Test>