-replace
使用正则表达式匹配机制,因此您可以构造匹配项以仅返回要替换的数据。替换字符串可以是变量。请参阅下面的正则表达式说明。它与Setting1=
之后的行上的其余字符匹配,然后将这些字符替换为$UserSetting1
中存储的值。我有一个configuration.txt文件,我的脚本使用该文件来填充脚本中的变量。 Tex文件的内容如下:
Setting1= Yes
Setting2= Yes
Setting3= Yes
然后我就这样填充变量(只提取是或否):
$Setting1=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting1='})
$Setting1=($Setting1 -Split '=', 2)[1].trim()
$Setting2=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting2='})
$Setting2=($Setting2 -Split '=', 2)[1].trim()
$Setting3=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting3='})
$Setting3=($Setting3 -Split '=', 2)[1].trim()
然后,我有了一些逻辑,如果用户通过脚本中的提示更改了这些设置,则脚本将使用以下代码更新文本文件:
((Get-Content -Path .\configuration.txt -Raw | Where-Object {$_ -match 'Setting1'}) -replace $Setting1, $UserSetting1) | Set-Content -Path .\configuration.txt
其中$ UserSetting1是用户的输入(“是”或“否”。
现在,此操作正在更改配置文件中的每个“是”或“否”,而不是仅更改我尝试使用match函数提取的特定行上的“是”或“否”。] >
换句话说,如果用户希望将设置1更改为“否”,并将设置2和3保留为“是”;该脚本将所有设置更改为“是”,而不仅仅是“ setting1”。
我的印象是我必须使用-Raw才能执行-replace,但是如上所述,-match函数似乎无法与-Raw函数一起使用...如果我不这样做, '不使用-raw,那么仅使用我匹配的单行重写我的配置文件。
我有一个configuration.txt文件,我的脚本使用该文件来填充脚本中的变量。 Tex文件的内容如下:Setting1 =是Setting2 =是Setting3 =是然后,我将变量原样填充到...中。
-replace
进行更新。$UserSetting1 = 'No'
(Get-Content -Path .\configuration.txt) -replace '(?<=Setting1=).*',$UserSetting1 |
Set-Content
-replace
使用正则表达式匹配机制,因此您可以构造匹配项以仅返回要替换的数据。替换字符串可以是变量。请参阅下面的正则表达式说明。它与Setting1=
之后的行上的其余字符匹配,然后将这些字符替换为$UserSetting1
中存储的值。(?<=)
是正则表达式肯定的后置断言。它断言在字符串中的给定位置后面有一个完全匹配。[
Setting1=
字符串Setting1=
的文字匹配。
.*
尽可能多的字符,直到字符串的结尾(就在换行符之前)。-replace
使用正则表达式匹配机制,因此您可以构造匹配项以仅返回要替换的数据。替换字符串可以是变量。请参阅下面的正则表达式说明。它与Setting1=
之后的行上的其余字符匹配,然后将这些字符替换为$UserSetting1
中存储的值。