如何在PowerShell中将字符串与变量连接?

时间:2010-10-20 13:58:27

标签: scripting string powershell

我正在尝试在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 个答案:

答案 0 :(得分:27)

试试这个

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

在您的代码中,

  1. $build-Config不是有效的变量名称。
  2. $.FullName应为$_.FullName
  3. $应为$_.Name

答案 1 :(得分:14)

您可以使用PowerShell等效的String.Format - 它通常是构建字符串的最简单方法。将{0},{1}等放在字符串中变量的位置,在字符串后面紧跟-f,然后用逗号分隔变量列表。

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

(我已经从$ buildconfig变量名中删除了破坏,因为我看到它也会导致问题。)

答案 2 :(得分:6)

尝试使用Join-Path cmdlet:

Get-ChildItem c:\code\*\bin\* -Filter *.dll | Foreach-Object {
    Join-Path -Path  $_.DirectoryName -ChildPath "$buildconfig\$($_.Name)" 
}

答案 3 :(得分:0)

这将获取所有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