PowerShell: combiner le chemin en utilisant une variable
Ce doit être quelque chose d'évident, mais je ne peux pas obtenir que cela fonctionne.
Je suis en train de construire une variable qui doit contenir le chemin d'accès à un fichier existant, à l'aide d'une variable d'environnement ($env:programfiles(x86)). Cependant je continue à faire des erreurs, et je ne vois pas pourquoi.
Cela fonctionne bien (si le fichier existe):
PS C:\> $f = "C:\Program Files (x86)" + '\sometextfile.txt'
PS C:\> $f
C:\Program Files (x86)\sometextfile.txt
PS C:\> gci $f
Directory: C:\Program Files (x86)
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 13/12/2010 14:03 0 sometextfile.txt
PS C:\>
Toutefois, cela ne signifie pas:
PS C:\> "$env:programfiles(x86)"
C:\Program Files(x86)
PS C:\> $f = "$env:ProgramFiles(x86)" + '\sometextfile.txt'
PS C:\> $f
C:\Program Files(x86)\sometextfile.txt
PS C:\> gci $f
Get-ChildItem : Cannot find path 'C:\Program Files(x86)\sometextfile.txt' because it does not exist.
At line:1 char:4
+ gci <<<< $f
+ CategoryInfo : ObjectNotFound: (C:\Program Files(x86)\sometextfile.txt:String) [Get-ChildItem], ItemNot
FoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Ce qui se passe, et comment le résoudre?
source d'informationauteur jeroenh | 2010-12-13
Vous devez vous connecter pour publier un commentaire.
Voici ce qui se passe...
Dans aucun chemin d'accès Windows PowerShell vide des caractères ou des espaces besoin d'être entouré, avec un jeu de guillemets ou de crochets. Le PowerShell variable d'environnement pour l'C:\Program Files (x86) est
${env:ProgramFiles(x86)}
pas$env:ProgamFiles(x86)
depuis PowerShell besoin d'échapper les espaces vides dans le vrai chemin.Si vous utilisez le '${env:ProgramFiles(x86)}' explicite variable d'Environnement, il fonctionne parfaitement.
Cela ne fonctionne pas...
ou cela....
Mais cela fonctionne très bien....
Qui est bizarre. Ressemble à un bug. Ce qu'il est en train de faire est bien de résoudre le $env:programfiles variable et en ajoutant le reste de la chaîne - qui dans ce cas se trouve être (x86).
Cela fonctionne bien: