Я пытаюсь рекурсивно переименовать кучу файлов с помощью 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() }
}
}