Как мне рекурсивно переименовать папки с помощью Powershell?

Рекурсивное переименование файлов с использованием PS тривиально (вариант в примере из Блог Майка Ормонда ):

dir *_t*.gif -recurse 
    | foreach { move-item -literal $_ $_.Name.Replace("_thumb[1]", "")}

Я пытаюсь рекурсивно переименовать структуру папок.

Сценарий использования: я хотел бы иметь возможность переименовать все Решение VS.NET (например, с Foo.Bar на Bar.Foo). Для этого есть несколько шагов:

  1. Переименование папок (например, \ Foo.Bar \ Foo.Bar.Model => \ Bar.Foo \ Bar.Foo.Model)
  2. Переименование файлов (например, Foo.Bar.Model.csproj => Bar.Foo. Model.csproj)
  3. Поиск и замена в файлах для исправления изменений пространства имен (например, 'namespace Foo.Bar' => 'namespace Bar.Foo')

В настоящее время я работаю над первым шагом в этом процессе.

Я нашел этот пост, в котором говорится о проблемах и предлагается решение, но не говорится о том, что это за решение.

Я все время натыкаюсь на стену рекурсии. Если я позволю PS обрабатывать рекурсию с помощью флага, родительская папка будет переименована раньше дочерних, и сценарий выдаст ошибку. Если я попытаюсь реализовать рекурсию сам, у меня заболеет голова и все пойдет ужасно неправильно - хоть убей, я не могу заставить вещи начинать свои переименования с хвоста дерева рекурсии.

9
задан outis 1 March 2012 в 08:08
поделиться