Удаление нескольких последовательных периодов из имен файлов - PullRequest
0 голосов
/ 28 мая 2019

Я работаю над очисткой общей папки для миграции на SharePoint и пишу сценарий для удаления или замены нежелательных символов в именах файлов. Я изо всех сил пытаюсь удалить несколько последовательных периодов (файл..example.txt в качестве примера того, с чем я имею дело).

Мне удалось использовать простой скрипт замены, приведенный ниже, для работы со всеми другими нежелательными символами, но сценарий завершился неудачно при попытке заменить ошибки двойного периода.

dir -recurse | rename-item -NewName {$_.name -replace ".." , ""}

Я ожидаю, что файл с именем, например file..example.txt, станет fileexample.txt, однако ничего не изменится.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Вместо этого вы можете использовать .replace (), и вам не нужно беспокоиться о регулярном выражении.Обратите внимание, что Rename-Item использует блок сценария привязки с задержкой https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_parameters?view=powershell-5.1

Get-Childitem -Recurse -Filter *..* | 
  Rename-Item -NewName { $_.Name.Replace('..','.') } -WhatIf
0 голосов
/ 03 июня 2019

Как отметил Мэтт в комментариях, -replace использует регулярное выражение. В регулярном выражении символ . является подстановочным знаком, обозначающим любой отдельный символ. Чтобы на самом деле выбрать точку, вы должны использовать \..

Регулярное выражение для выбора чего-либо с двумя или более точками: \.\.+ ( RegExr )

Следовательно, ваша команда должна быть:

dir -Recurse | Rename-Item -NewName {$_.name -replace "\.\.+" , ""}

Однако dir является псевдонимом для Get-ChildItem. При написании сценариев рекомендуется избегать псевдонимов, когда это возможно, поскольку это может создать ситуацию, когда ваш сценарий не работает в определенных средах. Учитывая это, ваша команда должна быть:

Get-ChildItem -Recurse | Rename-Item -NewName {$_.name -replace "\.\.+" , ""}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...