首页 > 解决方案 > 如何在 cd -path 中正确调用嵌套对象变量?

问题描述

我在win10-64位下使用powershell。我在“设置位置”功能下的 -path 参数中输入路径。我的路径变量是 System.Array 的一个属性,即“$list.name”。在一个循环中,我经常调用 ".\$list.name[$i]" 作为路径,但我失败了。我想正确调用嵌套变量。

  1. 显示变量的代码
PS C:\Users\admin\Documents\Rainmeter\Skins> $list
label name   link                                                        sort
----- ----   ----                                                        ----
    1 chrome C:\Program Files (x86)\Google\Chrome\Application\chrome.exe    1
    1 matlab C:\Program Files\MATLAB\R2019a\bin\matlab.exe                  3

PS C:\Users\admin\Documents\Rainmeter\Skins> $i=0
  1. 显示错误的代码
PS C:\Users\admin\Documents\Rainmeter\Skins> Set-Location -Path .\$list.name[$i]
Set-Location : could not find path “.\ .name[0]”,the path is not existed.
+ Set-Location -Path .\$list.name[0]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (.\ .name[0]:String) [Set-Location], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
  1. 我试图添加双引号,它失败了。如下,
Set-Location -Path ".\$list.name[$i]"
  1. 我必须命名另一个变量来替换嵌套变量。它有效,但并不漂亮。如下,
$file = $list.name[$i]
Set-Location -Path $file

我想在循环下正确调用-path参数中的嵌套变量并知道错误的原因。

感谢您的任何帮助。

标签: powershell

解决方案


您不能将位置设置为文件,用于Split-Path获取链接的父级,而不是名称。

Set-Location -Path (Split-Path -Path $list.link[$i] -Parent)

推荐阅读