使用 PS 递归重命名文件是微不足道的(来自Mike Ormond 博客的示例的变体):
dir *_t*.gif -recurse
| foreach { move-item -literal $_ $_.Name.Replace("_thumb[1]", "")}
我正在尝试递归重命名文件夹结构。
用例是我希望能够重命名整个 VS.NET 解决方案(例如,从 Foo.Bar 到 Bar.Foo)。为此,有几个步骤:
- 重命名文件夹(例如 \Foo.Bar\Foo.Bar.Model => \Bar.Foo\Bar.Foo.Model)
- 重命名文件(例如 Foo.Bar.Model.csproj => Bar.Foo.Model.csproj)
- 在文件中查找和替换以更正命名空间更改(例如,'namespace Foo.Bar' => 'namespace Bar.Foo')
我目前正在这个过程中迈出第一步。
我发现了这个帖子,它谈到了挑战,并声称有一个解决方案,但没有谈论那个解决方案是什么。
我一直碰到递归墙。如果我让 PS 使用标志处理递归,则父文件夹会在子文件夹之前重命名,并且脚本会引发错误。如果我尝试自己实现递归,我的头会很痛,事情会变得非常糟糕——在我的一生中,我无法让事情在递归树的尾部开始重命名。