Переименовать файл без имени (только с пробелом) с помощью Powershell - PullRequest
0 голосов
/ 27 февраля 2019

Я экспортировал некоторые почтовые файлы из приложения, и во время экспорта тема принимается за имя файла.Однако в исходной системе есть файлы без темы, поэтому имя файла также пустое (содержит только пробел).Я попытался запустить скрипт Powershell, чтобы исправить все это.Однако ничего не происходит:

Get-ChildItem <location> -recurse | ForEach-Object {if ($_.Name -Like " ") {Rename-Item "subject"}}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

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 '^ +$'
    
0 голосов
/ 27 февраля 2019

Полагаю, вы храните их как текстовые файлы.Затем используйте код:

Get-ChildItem -recurse | ForEach-Object {if ($_.BaseName -Like " ") {Rename-Item " .txt" "subject.txt"}}

Если файлы имеют другое расширение, замените .txt на ваше расширение

...