脚本以查找给定字符串并替换给定目录中的所有文件

时间:2011-06-03 15:10:04

标签: windows powershell

如何在powershell中编写脚本,在给定目录中的所有文件中找到给定字符串并将其更改为给定的第二个?

感谢您的帮助, 再见

3 个答案:

答案 0 :(得分:1)

也许是这样的

    $files = Get-ChildItem "DirectoryContainingFiles"
    foreach ($file in $files) 
    {
    $content = Get-Content -path $file.fullname
    $content | foreach {$_ -replace "toreplace", "replacewith"} | 
Set-Content $file.fullname
    }

答案 1 :(得分:1)

如果要替换的字符串跨越多行,那么除非将Get-Content的输出拼接成单个字符串,否则使用Get-Content不会删除它。在这种情况下使用[io.file] :: ReadAllText()更容易,例如:

Get-ChildItem | Where {!$_.PSIsContainer} | 
    Foreach { $txt = [IO.File]::ReadAllText($_.fullname); 
              $txt -replace $old,$new; $txt | Out-File $_}

请注意使用$ old,您可能需要在开头使用像'(?s)'这样的正则表达式指令,以指示.也匹配换行符。

答案 2 :(得分:0)

我相信你可以获得目录中所有文件的列表(简单?)。现在是替换件。以下是使用power shell的方法:

type somefile.txt | %{$_ -replace "string_to_be_replaces","new_strings"}

根据您的需要进行修改。您也可以像使用其他重定向一样将输出重定向到新文件(使用:>)。

要获取文件列表,请使用:

Get-ChildItem <DIR_PATH> -name