Переименовать файлы в нижний регистр в Powershell

Я пытаюсь рекурсивно переименовать кучу файлов с помощью Powershell 2.0. Структура каталогов выглядит так:

Leaflets
+ HTML
  - File1
  - File2
  ...
+ HTMLICONS
  + IMAGES
    - Image1
    - Image2
  - File1
  - File2
  ...
+ RTF
  - File1
  - File2
  ...
+ SGML
  - File1
  - File2
  ...

Я использую следующую команду:

get-childitem Leaflets -recurse | rename -newname { $_.name.ToLower() }

и, кажется, переименовывает файлы, но жалуется на подкаталоги:

Rename-Item : Source and destination path must be different.

Я ежемесячно перезагружаю данные с помощью robocopy, но каталоги не работают. изменить, поэтому я могу переименовать их вручную. Есть ли способ заставить get-children пропускать подкаталоги (например, find Leaflets -type f ... )?

Спасибо.

ОБНОВЛЕНИЕ: Похоже, что проблема в файлах, которые уже написаны строчными буквами. Я попытался изменить команду на:

get-childitem Leaflets -recurse | if ($_.name -ne $_name.ToLower()) rename -newname { $_.name.ToLower() }

, но теперь Powershell жалуется, что if не является командлетом, функцией и т. Д. Могу ли я передать вывод get-childitem оператору if ?

UPDATE 2 : Это работает:

$files=get-childitem Leaflets -recurse
foreach ($file in $files)
{
    if ($file.name -ne $file.name.ToLower())
    {
        rename -newname { $_.name.ToLower() }
    }
}
21
задан Ralph 29 September 2010 в 15:09
поделиться