PowerShell替换字符串
powershell创建目录在有的时候,可能需要对多个⽂件中的某个字符串进⾏替换,我们可以通过PowerShell对⽂件遍历并替换其字符串。
例:在E:\test⽬录下存在有多个⼦⽬录,我们需要将该⽬录下xml格式⽂件中的字符串“nihao”替换为“Hello”,分为以下两个步骤:
1、遍历该⽬录下的所有*.xml⽂件
2、对查出的*.xml⽂件中的字符串进⾏替换
使⽤Get-ChildItem命令可以对⽂件或⽬录进⾏遍历,–Rescure参数遍历⼦⽬录,-Include 参数过滤⽂件类型,如下:
Get-Childitem E:\test -Recurse -Include *.xml
获取到所需要遍历的⽂件之后,接下来使⽤Get-Content命令获取⽂件中的具体内容,由于上⼀步输出有多个⽂件,在此使⽤Foreach语句对每个⽂件进⾏操作,读取每个⽂件中的内容,命令如下:
$files = Get-Childitem E:\test -Recurse -Include *.xml
foreach ($file in $files)
{
$content = get-content $file.pspath
$content
}
Get-Content在读取⽂件内容的时候,会以“⾏”为单位,将其放⼊到⼀个数组中,所以在替换的时候,还需要使⽤ Foreach语句对每⾏进⾏处理,使⽤ Replace⽅法进⾏替换,命令如下:
foreach ($line in $content)
{
$liner = $line.Replace("nihao","Hello")
}
在此处需要注意的是,替换完成后,实际上替换后的内容还并没有被真正写⼊到原⽂件中,还需要使⽤Set-Content命令将替换后的内容写⼊到原⽂件中,命令如下:
foreach ($line in $content)
{
$liner = $line.Replace("nihao","Hello")
Set-Content $file.pspath -Value $liner
}
此时仍然会出现⼀个新的问题,就是每个⽂件被更新后,只是保留了最后⼀⾏的内容,所以在这⾥不应该使⽤Set-Content命令,⽽是应该使⽤Add-Content命令,将修改后的内容追加到原⽂件中,但这样⼀来,新内容和旧内容都会存在于同⼀个⽂件中,所以在追加新内容之前,需要先将原⽂件内容清空,可以使⽤Clear-Content命令。
完整的脚本命令如下:
copy-item E:\test F:\ -force -recurse #在替换之前先对⽂件进⾏备份
$files = Get-Childitem E:\test -Recurse -Include *.xml
foreach ($file in $files) #遍历⽂件
{
$content = get-content $file.pspath
clear-content $file.pspath #清空每个⽂件内容
foreach ($line in $content) #对每个⽂件中的⾏进⾏遍历
{
{
$liner = $line.Replace("nihao","Hello")
Add-content $file.pspath -Value $liner #附件内容到原⽂件 }
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论