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?

24
demandé sur Peter Mortensen 2010-10-20 17:58:27

4 réponses

Essayez ceci

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

dans votre code,

  1. $build-Config n'est pas un nom de variable valide.
  2. $.FullName doit être $_.FullName
  3. $ doit être $_.Name
27
répondu ravikanth 2010-10-20 14:25:12

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.)

14
répondu craika 2015-07-12 12:01:32

essayez le cmdlet Join-Path:

Get-ChildItem c:\code\*\bin\* -Filter *.dll | Foreach-Object {
    Join-Path -Path  $_.DirectoryName -ChildPath "$buildconfig$($_.Name)" 
}
6
répondu Shay Levy 2010-10-21 09:28:11

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

0
répondu Jacob Ballard 2010-10-20 22:04:59