随笔 - 911  文章 - 5  评论 - 94  阅读 - 243万

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 #附件内容到原文件

   }

 }

 

posted on   momingliu11  阅读(6084)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2013年1月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示