Сценарий PowerShell - невозможно преобразовать значение в регулярное выражение - PullRequest
0 голосов
/ 24 сентября 2018

Написал скрипт для копирования файлов из одной папки в другую через регулярное выражение:

param ([string]$dir)

$destination = "Q:\OneDrive\nuget-packages" 
$filter = [regex] "*.nupkg"

$bin = Get-ChildItem -Path $dir | Where-Object {$_.Name -match $filter} 
foreach ($item in $bin) {Copy-Item -Path $item.FullName -Destination $destination}

При запуске скрипта PowerShell сообщает, что не может преобразовать значение " .nupkg" в тип для ввода "System.Text.RegularExpressions.Regex».Ошибка: "синтаксический анализ" .nupkg "- квантификатор {x, y} ничего не следует."

Что не так с моим регулярным выражением?

1 Ответ

0 голосов
/ 24 сентября 2018

* не является подстановочным знаком в регулярном выражении, это квантификатор, это то, что определяет, сколько раз должен появляться предыдущий токен.

Нет никакого токена перед вашим *, чтоPowerShell жалуется (хотя он говорит о {x,y}, который является еще одним более общим квантификатором; я предполагаю, что он переводит * в эквивалент {0,} до появления ошибки).

\.nupkg$ может сделать то, чтовы хотите, сопоставляя все, что заканчивается .nupkg.

В этом регулярном выражении я не беспокоюсь о сопоставлении полной строки, однако я использую $, который представляет конец строки.Я также избегаю ., чтобы не понимать его как метасимвол, который он представляет в регулярном выражении.

Если вы хотите избежать совпадения только с .nupkg, вам нужно будет сопоставить еще несколько строк, что вы можете сделать с .+\.nupkg$, где . - это подстановочный знак регулярного выражения, а + - это квантификатор «1 или более раз».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...