代码之家  ›  专栏  ›  技术社区  ›  Micah

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

  •  24
  • Micah  · 技术社区  · 14 年前

    我试图在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 回复  |  直到 9 年前
        1
  •  28
  •   Daniel DiPaolo    14 年前

    试试这个

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

    在你的代码中,

    1. $build-Config 不是有效的变量名。
    2. $.FullName 应该是 $_.FullName
    3. $ 应该是 $_.Name
        2
  •  14
  •   Peter Mortensen Len Greski    9 年前

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

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

        3
  •  6
  •   Shay Levy    14 年前

    尝试Join-Path cmdlet:

    Get-ChildItem c:\code\*\bin\* -Filter *.dll | Foreach-Object {
        Join-Path -Path  $_.DirectoryName -ChildPath "$buildconfig\$($_.Name)" 
    }
    
        4
  •  0
  •   Jacob Ballard    14 年前

    这将获得所有的dll文件,并过滤那些与目录结构的regex匹配的文件。

    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