Как объединить строки с переменными в PowerShell? - PullRequest
24 голосов
/ 20 октября 2010

Я пытаюсь создать путь к файлу в PowerShell, и конкатенация строк выглядит немного странно.

У меня есть список папок:

c:\code\MyProj1
c:\code\MyProj2

Я хочу получить путь к файлу DLL здесь:

c:\code\MyProj1\bin\debug\MyProj1.dll
c:\code\MyProj2\bin\debug\MyProj2.dll

Вот что я пытаюсь сделать:

$buildconfig = "Debug"

Get-ChildItem c:\code | % {
    Write-Host $_.FullName + "\" + $buildconfig + "\" + $_ + ".dll"
}

Это не работает. Как я могу это исправить?

Ответы [ 4 ]

27 голосов
/ 20 октября 2010

Попробуйте это

Get-ChildItem  | % { Write-Host "$($_.FullName)\$buildConfig\$($_.Name).dll" }

В вашем коде

  1. $build-Config не является допустимым именем переменной.
  2. $.FullName должно быть $_.FullName
  3. $ должно быть $_.Name
14 голосов
/ 20 октября 2010

Вы можете использовать PowerShell-эквивалент String.Format - обычно это самый простой способ создать строку. Поместите {0}, {1} и т. Д. Там, где вы хотите переменные в строке, поставьте -f сразу после строки, а затем список переменных, разделенных запятыми.

Get-ChildItem c:\code|%{'{0}\{1}\{2}.dll' -f $_.fullname,$buildconfig,$_.name}

(я также вычеркнул черту из имени переменной $ buildconfig, как я уже видел, что и раньше вызывало проблемы.)

6 голосов
/ 21 октября 2010

Попробуйте командлет Join-Path:

Get-ChildItem c:\code\*\bin\* -Filter *.dll | Foreach-Object {
    Join-Path -Path  $_.DirectoryName -ChildPath "$buildconfig\$($_.Name)" 
}
0 голосов
/ 21 октября 2010

Это получит все DLL-файлы и отфильтрует те, которые соответствуют регулярному выражению вашей структуры каталогов.

Get-ChildItem C:\code -Recurse -filter "*.dll" | where { $_.directory -match 'C:\\code\\myproj.\\bin\\debug'}

Если вам нужен только путь, а не объект, который вы можете добавить | select fullname в конец следующим образом:

Get-ChildItem C:\code -Recurse -filter "*.dll" | where { $_.directory -match 'C:\\code\\myproj.\\bin\\debug'} | select fullname

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