2016-12-08 8 views
2

Поэтому у меня есть этот код:Powershell конкатенация переменных сред с путем

$userprofile=Get-ChildItem Env:USERPROFILE 
$localpath="$userprofile\some\path" 

Я бы ожидать выход ниже от $localpath:

c:\users\username\some\path 

Однако то, что я получаю:

System.Collections.DictionaryEntry\some\path 

Итак, что-то вроде cd $localpath не удается. Как я смогу выполнить то, что мне нужно?

ответ

4

удобный способ получить строковое значение, а не запись словаря (что технически, что Get-ChildItem обращается), чтобы просто использовать переменную синтаксис: $Env:USERPROFILE вместо Get-ChildItem Env:USERPROFILE.

$localpath = "$env:USERPROFILE\some\path" 

Для получения дополнительной информации:

PowerShell Environment Provider

about_Environment_Variables

Кроме того, Join-Path Командлет является хорошим способом, чтобы объединить две части пути.

$localpath = Join-Path $env:USERPROFILE 'some\path' 
+0

@AnsgarWiechers Спасибо за продуманное редактирование, приводящее примеры. –

+0

Если вы пришли из CMD-тяжелого мира Windows Scripting, не забудьте включить '$' в ваше имя сеттера. В CMD 'Set varname = something' должно быть,' $ varname = something', _ ** not ** _ 'varname = something'. –