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: 驱动器的根目录。 第二个命令将位置设置为文件系统提供程序中 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 或空字符串 ("")。

使用此参数不会更改当前位置。 只会更改 *-Location cmdlet 使用的堆栈。 除非你使用 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。

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

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

  • 若要将某个位置堆栈设为当前位置堆栈,请使用 Set-LocationStackName 参数。

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