使用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使用标志处理递归,父文件夹会在子文件夹之前被重命名,脚本会抛出错误。如果我尝试自己实现递归,我的头痛得厉害,事情会变得非常糟糕 - 我无论如何都无法使重命名从递归树的末尾开始。