Set-Location

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

语法

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

说明

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

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 中的当前位置,请使用 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

指定位置的路径。 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 堆栈。 除非使用 StackName 参数指定其他堆栈,否则 *-Location cmdlet 作用于当前堆栈。 有关位置堆栈的详细信息,请参阅 说明

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

输入

String

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

输出

None

默认情况下,此 cmdlet 不返回任何输出。

PathInfo

PassThru 参数与 PathLiteralPath 一起使用时,此 cmdlet 返回表示新位置的 PathInfo 对象。

PathInfoStack

PassThru 参数与 StackName 一起使用时,此 cmdlet 返回表示新堆栈上下文的 PathInfoStack 对象。

备注

PowerShell 包含以下别名 Set-Location

  • 所有平台:
    • cd
    • chdir
    • sl

PowerShell 支持每个进程多个运行空间。 每个运行空间都有自己的 当前目录。 这与 [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 参数。 若要显示命名位置堆栈中的位置,请使用 的 Get-LocationStackName 参数。

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

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

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