Powershell查找并替换不通过子目录递归

时间:2013-10-29 13:24:25

标签: windows powershell

我想递归一个给定文件夹的所有子文件夹,以及给定扩展名的所有文件(可选择通配符),搜索并替换一些文本。

之前有一个类似的问题here,我正在努力为我的目的提供最佳答案的修改版本。它使用Powershell进行查找和替换。但是,我下面的修改版本没有递归。我不记得我在哪里找到了第一行的recurse部分,所以也许我使用的不正确。

Get-ChildItem *.* -exclude *.ps1* -recurse |
Foreach-Object {
    $c = ($_ | Get-Content) 
    $c = $c -replace 'foo','bar'
    [IO.File]::WriteAllText($_.FullName, ($c -join "`r`n"))
}

我正在运行Powershell命令行中的代码作为PS批处理文件.ps1,因此排除了该扩展名。

如果我直接在包含我想要搜索的文件的文件夹中运行它,这可以正常工作,但是如果我从该文件夹的父文件中运行它,则不会发生子文件夹的搜索/递归。它甚至没有尝试,我可以从命令完成即时运行的事实中看出来。如果我在我的第一个子文件夹中运行它,它有大约50个文本文件,在它完成之前有几秒钟的延迟,向我表明它实际上正在搜索这些文件。

我也尝试过删除排除部分并且行为相同。

1 个答案:

答案 0 :(得分:1)

我的猜测是*.*仅匹配带有点的项目。文件夹没有扩展名,因此不匹配。

gci -rec -force -exclude *.ps1 |应该做你想做的事。