1

我想递归遍历给定文件夹的所有子文件夹,并且对于给定扩展名(可选通配符)的所有文件,搜索并替换一些文本。

这里有一个类似的previous question ,我正在尝试为我的目的获得最佳答案的修改版本。它使用 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 个文本文件,在它完成之前会有几秒钟的延迟,这表明它实际上是在搜索这些文件。

我也试过这个,去掉了排除部分,行为是一样的。

4

1 回答 1

1

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

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

于 2013-10-29T18:44:16.783 回答