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 2013-01-09 14:43  momingliu11  阅读(6071)  评论(0编辑  收藏  举报