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

Scripting 如何在PowerShell中将字符串与变量连接起来?,scripting,string,powershell,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

我试图在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"
}
这不管用。我如何修复它?

试试这个

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

  • $build Config
    不是有效的变量名
  • $.FullName
    应该是
    $\uu.FullName
  • $
    应该是
    $\uu.Name

  • 您可以使用相当于String.Format的PowerShell—这通常是构建字符串的最简单方法。将{0}、{1}等放在字符串中需要变量的位置,在字符串后面紧接着放一个
    -f
    ,然后是用逗号分隔的变量列表

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

    (我还去掉了$buildconfig变量名中的破折号,正如我以前看到的那样,它也会导致问题。)

    这将获取所有与目录结构的正则表达式匹配的dll文件和筛选器文件

    Get ChildItem C:\code-Recurse-filter“*.dll”|其中{$\.directory-match'C:\\code\\myproj\\bin\\debug'}

    如果您只需要路径,而不是对象,您可以将
    |选择fullname
    添加到末尾,如下所示:


    Get-ChildItem C:\code-Recurse-filter“*.dll”|其中{$\.directory-match'C:\\code\\myproj\\bin\\debug'}|选择全名

    尝试连接路径cmdlet:

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

    使用
    写入主机时要小心-它只写入主机控制台。您无法将该输出捕获到变量中。如果您只需删除
    Write Host
    并将字符串放在那里,它将1)隐式使用Write Output,2)您将能够将该输出捕获到一个变量,例如
    gci c:\code |%{$\.FullName+“`$build config\$($\.basename)\.dll”
    $\uName
    包含扩展名。我怀疑目的是用
    .dll
    替换当前扩展名,而不是附加一个
    .dll
    :-)他说他有一个文件夹列表。因此,$\uName应该可以。否则,$\uName就可以了。