Lee Daily предоставил критический указатель в комментарии: свойство .Name
объектов file-info , выводимых Get-ChildItem
, включает расширение тогда как вы должны проверить только .BaseName
, то есть часть имени файла , исключая расширение.
Get-ChildItem $someDir -Recurse | Where-Object BaseName -eq ' ' |
Rename-Item -NewName { 'subject' + $_.Extension } -WhatIf
PSv3 + синтаксис;общий параметр -WhatIf
превью операция переименования;удалите его для фактического переименования.
Нет смысла использовать оператор -like
, если шаблон для сравнения является литеральной строкой, такой как ' '
- следовательно, -eq
используется.
Обратите внимание на использование блока сценариев с задержкой привязки с -NewName
, который позволяет проводить трубопровод непосредственно к Rename-Item
, безнеобходимость промежуточного и неэффективного вызова ForEach-Object
.
Если имена файлов могут состоять из переменной количества пробелов (один или несколько),вместо этого используйте следующий вызов Where-Object
, в котором используется оператор -match
с регулярным выражением :
Where-Object BaseName -match '^ +$'