Переименуйте файлы с помощью Powershell, если файл имеет определенную структуру - PullRequest
0 голосов
/ 03 марта 2019

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

  • (1) .txt
  • (2) .txt
  • (3) .txt

Я хочу добавить следующий текст перед ним: "Тема отсутствует"

Я только хочу переименовать эти файлы, все остальные должны остаться прежними

1 Ответ

0 голосов
/ 03 марта 2019

Подсказка к LotPings для предложения использования прогнозного утверждения в регулярном выражении.

Get-ChildItem -File | Rename-Item -NewName { 
  $_.Name -replace '^(?=\(\d+\)\.)', 'Subject is missing '
} -WhatIf

-WhatIf превью операция переименования;удалите его, чтобы выполнить фактическое переименование.

  • Get-ChildItem -File перечисляет только файлы, но без фильтра имен - в то время как вы можете попытаться применить фильтр с подстановочными знаками заранее - например,, -Filter '([0-9]).*' - вы не могли убедиться, что многозначные имена (например, (13).txt) правильно сопоставлены.

    • Однако вы можете предварительно-filter результаты с -Filter '(*).*'
  • В вызове Rename-Item используется блок сценария с задержкой привязки для получения нового имени.

    • Используется тот факт, что (a) -rename возвращает входную строку без изменений, если регулярное выражение не совпадает, (b) Rename-Item не делает ничего если новое имя файла совпадает со старым.
  • В регулярном выражении, переданном в -replace, положительное прогнозное утверждение (?=...)(который сопоставляется в начале входной строки (^)) ищет совпадение для подвыражения \(\d+\)\. без учета того, что совпадает с частью того, что должно быть заменено .По сути, только начальная позиция (^) входной строки сопоставляется и «заменяется».

    • Subexpression \(\d+\)\. соответствует литералу ( (экранированныйкак \(), за которым следуют 1 или более (+) цифр (\d), за которыми следуют литерал ) и литерал . (\.), который обозначает начало расширения имени файла,(Замените .\ на $, утверждение конца ввода, если вы хотите сопоставить имена файлов, которые не имеют расширения).
  • Следовательно, операнд замены 'Subject is missing ' эффективно добавляется к входной строке, так что, например, (1).txt возвращает Subject is missing (1).txt.

...