String 使用powershell替换文本文件中的字符
我正在尝试替换文本文件中的一个部分。 首先,我搜索了文本文件中是否存在它String 使用powershell替换文本文件中的字符,string,powershell,replace,String,Powershell,Replace,我正在尝试替换文本文件中的一个部分。 首先,我搜索了文本文件中是否存在它 $check = Get-Content sample.txt | Where-Object {$_.Contains('<add key="IIS_VERSION" value="7" />')} if ($checkIISv) { Write-Host "IIS's version is already 7" } else { Write-Host "Update IIS version to 7" #
$check = Get-Content sample.txt | Where-Object {$_.Contains('<add key="IIS_VERSION" value="7" />')}
if ($checkIISv)
{
Write-Host "IIS's version is already 7"
}
else
{
Write-Host "Update IIS version to 7"
# I want to place here a code that will replace the value="7" if it is not =7
# This value is usually not 7
}
$check=Get Content sample.txt |其中对象{$\包含(“”)}
如果($checkIISv)
{
写入主机“IIS的版本已为7”
}
其他的
{
写入主机“将IIS版本更新为7”
#我想在这里放置一个代码,如果值不等于7,它将替换值=“7”
#该值通常不是7
}
请帮助,我不认为这里可以使用替换函数,因为“值”被认为是未知的。您可以使用正则表达式模式替换
-replace
。但是,这是一个web/app xml配置,因此您应该将其作为xml文档进行修改。前
#$xml = [xml](Get-Content "c:\folder\app.config")
$xml = [xml]@"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="IIS_VERSION" value="8" />
<add key="somekey" value="somevalue" />
</appSettings>
</configuration>
"@
$IISVersion = $xml.SelectSingleNode("//add[@key='IIS_VERSION']")
if ($IISVersion.Value -eq 7)
{
Write-Host "IIS's version is already 7"
}
else
{
Write-Host "Update IIS version to 7"
$IISVersion.Value = "7"
}
$xml.Save("c:\folder\app.config")
#$xml=[xml](获取内容“c:\folder\app.config”)
$xml=[xml]@”
"@
$IISVersion=$xml.SelectSingleNode(//add[@key='IIS\U VERSION'])
如果($IISVersion.Value-等式7)
{
写入主机“IIS的版本已为7”
}
其他的
{
写入主机“将IIS版本更新为7”
$IISVersion.Value=“7”
}
$xml.Save(“c:\folder\app.config”)
您可以使用正则表达式模式来替换值。但是,这是一个web/app xml配置,因此您应该将其作为xml文档进行修改。前
#$xml = [xml](Get-Content "c:\folder\app.config")
$xml = [xml]@"
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="IIS_VERSION" value="8" />
<add key="somekey" value="somevalue" />
</appSettings>
</configuration>
"@
$IISVersion = $xml.SelectSingleNode("//add[@key='IIS_VERSION']")
if ($IISVersion.Value -eq 7)
{
Write-Host "IIS's version is already 7"
}
else
{
Write-Host "Update IIS version to 7"
$IISVersion.Value = "7"
}
$xml.Save("c:\folder\app.config")
#$xml=[xml](获取内容“c:\folder\app.config”)
$xml=[xml]@”
"@
$IISVersion=$xml.SelectSingleNode(//add[@key='IIS\U VERSION'])
如果($IISVersion.Value-等式7)
{
写入主机“IIS的版本已为7”
}
其他的
{
写入主机“将IIS版本更新为7”
$IISVersion.Value=“7”
}
$xml.Save(“c:\folder\app.config”)
如果该行始终存在,您当然可以使用-替换
。它执行regex替换,可在此处使用:
$content = Get-Content sample.txt
if ($content -match '<add key="IIS_VERSION" value="7" />') {
Write-Host "IIS's version is already 7"
} else {
Write-Host "Update IIS version to 7"
$content -replace '<add key="IIS_VERSION" value="[^"]+" />', '<add key="IIS_VERSION" value="7" />'
}
(未经测试,我不经常这样做,但这些行应该是单独的。)如果该行始终存在,您当然可以使用
-替换。它执行regex替换,可在此处使用:
$content = Get-Content sample.txt
if ($content -match '<add key="IIS_VERSION" value="7" />') {
Write-Host "IIS's version is already 7"
} else {
Write-Host "Update IIS version to 7"
$content -replace '<add key="IIS_VERSION" value="[^"]+" />', '<add key="IIS_VERSION" value="7" />'
}
(未经测试,我不经常这样做,但应该是单独的那些行。)
内容看起来像XML,所以您应该考虑使用XPath表达式来选择节点并更改值(参见)。但是,您也可以使用正则表达式来实现这一点(使用正向查找来查找位置)
$txt=Get Content sample.txt
$ReXEX=(?< p>内容看起来像XML,因此您应该考虑使用XPath表达式来选择节点并更改值(参见)。但是,您也可以使用正则表达式(使用正查找查找位置)< /P>来完成此操作。
$txt=Get Content sample.txt
$regex='(?我现在的问题是,它只更新条形码格式,如果低于7,则不再更新iis版本
$path='C:\Users\hello\Documents'
#Update the IIS version to 7
$content = Get-Content $path\Web.config
if ($content -match '<add key="IIS_VERSION" value="7" />')
{
Write-Host "IIS's version is already 7"
}
else
{
Write-Host "Updated IIS version to 7"
$content -replace '<add key="IIS_VERSION" value="[^"]+" />', '<add key="IIS_VERSION" value="7" />' | Set-Content $path\sample.txt
}
# Update the Barcode Format
if ($content -match '<add key="BARCODE_FORMAT" value="1" />')
{
Write-Host "Barcode format is already 1"
}
else
{
Write-Host "Updated Barcode Format to 1"
$content -replace '<add key="BARCODE_FORMAT" value="[^"]+" />', '<add key="BARCODE_FORMAT" value="1" />' | Set-Content $path\sample.txt
}
#将IIS版本更新为7
$content=Get content$path\Web.config
如果($content-match“”)
{
写入主机“IIS的版本已为7”
}
其他的
{
写入主机“已将IIS版本更新为7”
$content-替换“”,''设置内容$path\sample.txt
}
我现在的问题是,它只更新条形码格式,如果低于7,则不再更新iis版本
$path='C:\Users\hello\Documents'
#Update the IIS version to 7
$content = Get-Content $path\Web.config
if ($content -match '<add key="IIS_VERSION" value="7" />')
{
Write-Host "IIS's version is already 7"
}
else
{
Write-Host "Updated IIS version to 7"
$content -replace '<add key="IIS_VERSION" value="[^"]+" />', '<add key="IIS_VERSION" value="7" />' | Set-Content $path\sample.txt
}
# Update the Barcode Format
if ($content -match '<add key="BARCODE_FORMAT" value="1" />')
{
Write-Host "Barcode format is already 1"
}
else
{
Write-Host "Updated Barcode Format to 1"
$content -replace '<add key="BARCODE_FORMAT" value="[^"]+" />', '<add key="BARCODE_FORMAT" value="1" />' | Set-Content $path\sample.txt
}
#将IIS版本更新为7
$content=Get content$path\Web.config
如果($content-match“”)
{
写入主机“IIS的版本已为7”
}
其他的
{
写入主机“已将IIS版本更新为7”
$content-替换“”,''设置内容$path\sample.txt
}
这可能是最好的解决方案。这可能是最好的解决方案。谢谢!我使用了您的第一个脚本,刚刚添加了“| Set Content sample.txt”。不过,我想了解一下这一点,这[^”]代表?它是某种通配符吗?我正要编辑几行,但似乎它唯一编辑的是最后一条语句[^]+
是一个正则表达式,它匹配的字符串不是引号。这是一种简单的方法,可以指定两个分隔符之间的所有文本,在本例中,指定两个引号之间的所有文本。为此,无论如何,我已经根据您的建议发布了更新的脚本,但是,当我创建另一个集以更新另一个分隔符时er行唯一更改的是最后一个,请参阅我的帖子。提前谢谢谢谢谢谢!我使用了您的第一个脚本,刚刚添加了“| Set Content sample.txt”。但是我想了解这一点,这是什么[^”]代表?它是某种通配符吗?我正要编辑几行,但似乎它唯一编辑的是最后一条语句[^]+
是一个正则表达式,它匹配的字符串不是引号。这是一种简单的方法,可以指定两个分隔符之间的所有文本,在本例中,指定两个引号之间的所有文本。为此,无论如何,我已经根据您的建议发布了更新的脚本,但是,当我创建另一个集以更新另一个分隔符时er行唯一更改的是最后一个,请参阅我的帖子。提前谢谢。如果您添加新答案,我们不会收到通知。请对特定答案进行注释。出现问题的原因是您在if测试中包含设置内容,因此它会写入文件两次(最后一个覆盖了第一个,只修改了条形码)。如果在测试中更改为$content=$content-replace…
(没有任何设置内容
)在脚本的结尾使用$content | set content
,它会起作用。或者使用我已经这样做的方法。条形码部分从来都不是问题的一部分,因此如果您想使用它,您需要扩展我的答案。如果您添加新答案,我们不会收到通知。请对特定答案使用注释。您的问题发生了ned,因为您在if测试中包含了设置内容
,所以它会写入文件两次(最后一次会覆盖第一次,只修改条形码)。如果您在测试中更改为$content=$content-replace…
(没有任何设置内容
),并且