web-dev-qa-db-fra.com

Comment concaténer des chaînes avec des variables dans PowerShell?

J'essaie de créer un chemin de fichier dans PowerShell et la concaténation de chaînes semble être un peu géniale.

J'ai une liste de dossiers:

c:\code\MyProj1
c:\code\MyProj2

Je veux obtenir le chemin vers un fichier DLL ici:

c:\code\MyProj1\bin\debug\MyProj1.dll
c:\code\MyProj2\bin\debug\MyProj2.dll

Voici ce que j'essaie de faire:

$buildconfig = "Debug"

Get-ChildItem c:\code | % {
    Write-Host $_.FullName + "\" + $buildconfig + "\" + $_ + ".dll"
}

Ça ne marche pas. Comment puis-je le réparer?

24
Micah

Essaye ça

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

Dans votre code,

  1. $build-Config n'est pas un nom de variable valide.
  2. $.FullName devrait être $_.FullName
  3. $ devrait être $_.Name
27
ravikanth

Vous pouvez utiliser l'équivalent PowerShell de String.Format - c'est généralement le moyen le plus simple de créer une chaîne. Placez {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 des variables séparées par des virgules.

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

(J'ai également retiré le tiret du nom de la variable $ buildconfig car j'ai vu que cela causait des problèmes auparavant aussi.)

14
craika

Essayez l'applet de commande Join-Path:

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

Cela obtiendra tous les fichiers dll et les filtres qui correspondent à une expression régulière de votre structure de répertoires.

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

0
Jacob Ballard