Comment concaténer des chaînes avec des variables dans PowerShell?
j'essaie de construire un chemin de fichier dans PowerShell et la concaténation de la chaîne semble un peu bizarre.
j'ai une liste de dossiers:
c:codeMyProj1
c:codeMyProj2
je veux obtenir le chemin d'accès à un fichier DLL ici:
c:codeMyProj1bindebugMyProj1.dll
c:codeMyProj2bindebugMyProj2.dll
Voici ce que j'essaie de faire:
$buildconfig = "Debug"
Get-ChildItem c:code | % {
Write-Host $_.FullName + "" + $buildconfig + "" + $_ + ".dll"
}
Cela ne fonctionne pas. Comment puis-je résoudre ce problème?
4 réponses
Essayez ceci
Get-ChildItem | % { Write-Host "$($_.FullName)$buildConfig$($_.Name).dll" }
dans votre code,
$build-Config
n'est pas un nom de variable valide.$.FullName
doit être$_.FullName
$
doit être$_.Name
vous pouvez utiliser L'équivalent PowerShell de la chaîne.Format - c'est habituellement la façon la plus facile de construire une chaîne de caractères. Lieu {0}, {1}, etc. où vous voulez les variables dans la chaîne, mettez un -f
immédiatement après la chaîne, puis la liste de variables séparées par des virgules.
Get-ChildItem c:\code|%{'{0}\{1}\{2}.dll' -f $_.fullname,$buildconfig,$_.name}
(j'ai aussi enlevé le tiret du nom de la variable $buildconfig comme je l'ai vu qui provoque des problèmes avant aussi.)
essayez le cmdlet Join-Path:
Get-ChildItem c:\code\*\bin\* -Filter *.dll | Foreach-Object {
Join-Path -Path $_.DirectoryName -ChildPath "$buildconfig$($_.Name)"
}
cela va obtenir tous les fichiers dll et filtrer ceux qui correspondent à un regex de la structure de votre répertoire.
Get-ChildItem C:\code -Recurse -filter "*.dll" | where { $_.directory -match 'C:\code\myproj.\bin\debug'}
si vous voulez juste le chemin, pas l'objet que vous pouvez ajouter | select fullname
à la fin comme ceci:
Get-ChildItem C:\code -Recurse -filter "*.dll" | where { $_.directory -match 'C:\code\myproj.\bin\debug'} | select fullname