$_ -replace ([regex]::Matches($_ , "\d{4,}")), "DATESTAMP"
Значения в $ _ заменяют каждое нахождение ([regex]::Matches($_ , "\d{4,}"))
на "DATESTAMP"
.
Так как в имени файла без метки времени (или, по крайней мере, 4 последовательных чисел) совпадения нет, возвращается ""
(пустая строка).
Таким образом, каждая пустая строка заменяется на DATESTAMP
. И такая пустая строка ""
находится в начале строки и после каждого другого символа.
Вот почему вы получаете эту длинную строку с каждым символом, окруженным DATESTAMP.
Чтобы проверить, существует ли в вашей строке \d{4,}
, вы можете использовать
[regex]::IsMatch($_, "\d{4,}")
Я не пользователь Powershell, но эта строка сама по себе должна делать свою работу. Но я не уверен, что смогу использовать if в конвейере и более или менее, и назначение, и echo $ d необходимы
$f | foreach-object {$_ -replace "-", ""} | foreach-object {if ($_ -match "\d{4,}") { $_ -replace "\d{4,}", "DATESTAMP"} else { $_ }}