我想递归一个给定文件夹的所有子文件夹,以及给定扩展名的所有文件(可选择通配符),搜索并替换一些文本。
之前有一个类似的问题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个文本文件,在它完成之前有几秒钟的延迟,向我表明它实际上正在搜索这些文件。
我也尝试过删除排除部分并且行为相同。
答案 0 :(得分:1)
我的猜测是*.*
仅匹配带有点的项目。文件夹没有扩展名,因此不匹配。
gci -rec -force -exclude *.ps1 |
应该做你想做的事。