Scripting 如何在PowerShell中将字符串与变量连接起来?
我试图在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
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就可以了。