#powershell
#powershell
Вопрос:
Я пытаюсь скопировать файлы, которые соответствуют идентификатору среды, заданному для переменной. Вывод команды выглядит хорошо, пока не будет включен where-object
раздел. Я хочу копировать только те файлы, которые содержат строку в $environmenttype
строке.
Что мне нужно изменить, чтобы заставить where-object
работать правильно?
$environmenttype = "dev"
Write-Output "environmenttype is set to $environmenttype"
Get-ChildItem -path "content" | Select-Object -ExpandProperty name | Where-Object {$_ -contains "$environmenttype"} | Copy-Item -Path "C:newdir"
Комментарии:
1.
$_ -contains "$environmenttype"
->$_ -like "*$environmenttype*"
Ответ №1:
Как бы я это написал:
Get-ChildItem "content" -File | where BaseName -like "*$environmenttype*" | Copy-Item "C:newdir"
Я использую упрощенную версию Where-Object
и -like
оператор / параметр и шаблон подстановочных знаков (обратите внимание на звездочки *
).
BaseName
это имя файла без расширения.
Я опустил некоторые неявные имена параметров и добавил -File
переключатель для включения только файлов.
(Обратите внимание, что путь в Copy-Item
задается конвейером, поэтому параметр на самом деле -Destination
)
Ответ №2:
Вы можете использовать предикат match, который поддерживает использование переменной.
$filter = "ansi"
Get-ChildItem -path "c:dev" | Where-Object {$_.Name -match "$filter"} | Copy-Item -Destination C:devtestFolder