Set-Location

将当前工作位置设置为指定的位置。

语法

Set-Location
   [[-Path] <String>]
   [-PassThru]
   [<CommonParameters>]
Set-Location
   -LiteralPath <String>
   [-PassThru]
   [<CommonParameters>]
Set-Location
   [-PassThru]
   [-StackName <String>]
   [<CommonParameters>]

说明

Set-Location cmdlet 将工作位置设置为指定位置。 该位置可以是目录、子目录、注册表位置或任何提供程序路径。

PowerShell 6.2 添加了对 -Path 参数的值的支持和+作为值。 PowerShell 维护过去 20 个可访问-+的位置和位置的历史记录。 此列表独立于使用 StackName 参数访问的位置堆栈。

示例

示例 1:设置当前位置

PS C:\> Set-Location -Path "HKLM:\"
PS HKLM:\>

此命令将当前位置设置为驱动器的 HKLM: 根目录。

示例 2:设置当前位置并显示该位置

PS C:\> Set-Location -Path "Env:\" -PassThru

Path
----
Env:\

PS Env:\>

此命令将当前位置设置为驱动器的 Env: 根目录。 它使用 PassThru 参数指示 PowerShell 返回一个代表位置的 Env:\PathInfo 对象。

示例 3:将位置设置为 C: 驱动器中的当前位置

PS C:\Windows\> Set-Location HKLM:\
PS HKLM:\> Set-Location C:
PS C:\Windows\>

第一个命令将位置设置为注册表提供程序中驱动器的 HKLM: 根目录。 第二个命令将位置设置为 FileSystem 提供程序中驱动器的 C: 当前位置。 在窗体 <DriveName>: 中指定驱动器名称时, (没有反斜杠) ,cmdlet 会将位置设置为 PSDrive 中的当前位置。 若要获取 PSDrive use Get-Location -PSDrive <DriveName> 命令中的当前位置,

示例 4:将当前位置设置为命名堆栈

PS C:\> Push-Location -Path 'C:\Program Files\PowerShell\' -StackName "Paths"
PS C:\Program Files\PowerShell\> Set-Location -StackName "Paths"
PS C:\Program Files\PowerShell\> Get-Location -Stack

Path
----
C:\

第一个命令将当前位置添加到“路径”堆栈。 第二个命令使路径位置堆栈成为当前位置堆栈。 第三个命令显示当前位置堆栈中的位置。

*-Location除非命令中指定了其他位置堆栈,否则该 cmdlet 将使用当前位置堆栈。 有关位置堆栈的信息,请参阅 “备注”。

示例 5:使用“+”或“-”导航位置历史记录

PS C:\> Set-Location -Path $env:SystemRoot
PS C:\Windows> Set-Location -Path Cert:\
PS Cert:\> Set-Location -Path HKLM:\
PS HKLM:\>

# Navigate back through the history using "-"
PS HKLM:\> Set-Location -Path -
PS Cert:\> Set-Location -Path -
PS C:\Windows>

# Navigate using the Set-Location alias "cd" and the implicit positional Path parameter
PS C:\Windows> cd -
PS C:\> cd +
PS C:\Windows> cd +
PS Cert:\>

使用别名, cd - 或者 cd + 是一种在终端中导航位置历史记录的简单方法。 有关导航的详细信息 -/+,请参阅 Path 参数。

参数

-LiteralPath

指定位置的路径。 文本路径参数的值与类型化完全相同。 不会将任何字符解释为通配字符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-PassThru

返回一个 PathInfo 对象,该对象代表位置。 默认情况下,此 cmdlet 将不产生任何输出。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

指定新工作位置的路径。 如果未提供路径, Set-Location 则默认为当前用户的主目录。 使用通配符时,cmdlet 会选择与通配符模式匹配的容器 (目录、注册表项、证书存储) 。 如果通配符模式与多个容器匹配,则 cmdlet 将返回错误。

PowerShell 保留你设置的最后 20 个位置的历史记录。 如果 Path 参数值为 - 字符,则新工作位置将是历史记录中的上一个工作位置, (如果存在) 。 同样,如果值为 + 字符,则新工作位置将是历史记录中的下一个工作位置, (如果存在) 。 这类似于使用 Pop-LocationPush-Location 除了历史记录是列表,而不是堆栈,并且是隐式跟踪的,而不是手动控制的。 无法查看历史记录列表。

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:True

-StackName

指定此 cmdlet 创建当前位置堆栈的现有位置堆栈名称。 输入位置堆栈名称。 若要指示未命名的默认位置堆栈,请键入 $null 或 () 空字符串 ""

使用此参数不会更改当前位置。 它只更改 cmdlet 使用的 *-Location 堆栈。 *-Location除非使用 StackName 参数来指定其他堆栈,否则 cmdlet 会对当前堆栈执行操作。 有关位置堆栈的详细信息,请参阅 说明

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

输入

String

可以通过管道将包含路径(但不是文本路径)的字符串传递给此 cmdlet。

输出

None, System.Management.Automation.PathInfo, System.Management.Automation.PathInfoStack

除非指定 PassThru 参数,否则此 cmdlet 不会生成任何输出。 将 PassThruPathLiteralPath 配合使用会生成一个 PathInfo 对象,该对象表示新位置。 将 PassThruStackName 配合使用会生成一个 PathInfoStack 对象,该对象表示新的堆栈上下文。

备注

PowerShell 支持每个进程的多个运行空间。 每个 Runspace 都有其自己的 当前目录。 这与 [System.Environment]::CurrentDirectory。 调用 .NET API 或运行本机应用程序而不提供显式目录路径时,此行为可能是一个问题。

即使位置 cmdlet 确实设置了进程范围的当前目录,也不能依赖它,因为其他运行空间随时可能会更改它。 应使用位置 cmdlet 使用特定于当前运行空间的当前工作目录执行基于路径的操作。

Set-Location cmdlet 旨在处理任何提供程序公开的数据。 若要列出会话中可用的提供程序,请键入 Get-PSProvider。 有关详细信息,请参阅 about_Providers

堆栈是一种后进先出的列表,在其中只能访问最后添加的项。 采用要使用项的顺序将这些项添加到堆栈,然后采用相反顺序检索这些项以供使用。 PowerShell 允许将提供程序位置存储在位置堆栈中。 PowerShell 创建未命名的默认位置堆栈。 可以创建多个命名位置堆栈。 如果未指定堆栈名称,PowerShell 将使用当前位置堆栈。 默认情况下,未命名的默认位置是当前位置堆栈,但可以使用 Set-Location cmdlet 更改当前位置堆栈。

若要管理位置堆栈,请使用 *-Location cmdlet,如下所示:

  • 若要将位置添加到位置堆栈,请使用 Push-Location cmdlet。

  • 若要从位置堆栈获取位置,请使用 Pop-Location cmdlet。

  • 若要显示当前位置堆栈中的位置,请使用 cmdlet 的 Get-LocationStack 参数。 若要在命名位置堆栈中显示位置,请使用 StackName 参数 Get-Location

  • 若要创建新的位置堆栈,请使用 StackName 参数。Push-Location 如果指定不存在的堆栈, Push-Location 则创建堆栈。

  • 若要使位置堆栈成为当前位置堆栈,请使用 StackName 参数。Set-Location

未命名的默认位置堆栈仅在其是当前位置堆栈时处于完全可访问状态。 如果将命名位置堆栈设为当前位置堆栈,则不能再使用 Push-LocationPop-Location cmdlet 从默认堆栈添加或获取项,或使用 Get-Location cmdlet 显示未命名堆栈中的位置。 若要将未命名的堆栈设置为当前堆栈,请使用 cmdlet $nullSet-LocationStackName 参数的值或空字符串 ("") 。