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:\
对象。
示例 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 不要将任何字符解释为转义序列。
类型: | String |
别名: | PSPath, LP |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-PassThru
返回一个 PathInfo 对象,该对象代表位置。 默认情况下,此 cmdlet 不生成任何输出。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Path
指定新工作位置的路径。 如果未提供路径,Set-Location
默认为当前用户的主目录。 使用通配符时,cmdlet 会选择与通配符模式匹配的容器(目录、注册表项、证书存储)。 如果通配符模式与多个容器匹配,则 cmdlet 将返回错误。
PowerShell 保留你设置的最后 20 个位置的历史记录。 如果 Path 参数值是 -
字符,则新工作位置将是历史记录中以前的工作位置(如果存在)。 同样,如果值为 +
字符,则新的工作位置将是历史记录中的下一个工作位置(如果存在)。 这类似于使用 Pop-Location
和 Push-Location
,只是历史记录是列表,而不是堆栈,并且是隐式跟踪的,而不是手动控制的。 无法查看历史记录列表。
类型: | String |
Position: | 0 |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | True |
-StackName
指定此 cmdlet 生成当前位置堆栈的现有位置堆栈名称。 输入位置堆栈名称。 若要指示未命名的默认位置堆栈,请键入 $null
或空字符串(""
)。
使用此参数不会更改当前位置。 它仅更改 *-Location
cmdlet 使用的堆栈。 除非使用 *-Location
参数来指定其他堆栈,否则 cmdlet 在当前堆栈上执行作。 有关位置堆栈的详细信息,请参阅 备注。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
输入
可以通过管道将包含路径(而不是文本路径)的字符串传递给此 cmdlet。
输出
None
默认情况下,此 cmdlet 不返回任何输出。
将 PassThru 参数与 Path 或 LiteralPath配合使用时,此 cmdlet 将返回表示新位置的 PathInfo 对象。
将 PassThru 参数用于 StackName时,此 cmdlet 将返回表示新堆栈上下文的 PathInfoStack 对象。
备注
PowerShell 包含以下 Set-Location
别名:
- 所有平台:
cd
chdir
sl
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-Location
参数。 若要在命名位置堆栈中显示位置,请使用 的Get-Location
参数。若要创建新的位置堆栈,请使用
Push-Location
参数。 如果指定不存在的堆栈,Push-Location
创建堆栈。若要使位置堆栈成为当前位置堆栈,请使用 的
Set-Location
参数。
仅当默认位置堆栈是当前位置堆栈时,才完全可访问未命名的默认位置堆栈。
如果将命名位置堆栈设为当前位置堆栈,则不能再使用 Push-Location
或 Pop-Location
cmdlet 从默认堆栈添加或获取项,或使用 Get-Location
cmdlet 显示未命名堆栈中的位置。 若要使未命名的堆栈成为当前堆栈,请使用 cmdlet 的 Set-Location
参数,其值为 $null
或空字符串(""
)。