Как скопировать файлы в powershell, содержащие переменную в имени?

#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