将目录更改为 Powershell 中的上一个目录

Kaz*_*ark 43 powershell history

我是一个 Linux 人,但我正在努力保持开放的态度并学习一些 Powershell。我想念cd -回到上一个目录的能力,比如在 *nix shell 中。Powershell 中是否有类似的命令——允许我返回到我以前的目录?

EBG*_*een 21

与我所知道的完全不同。一种选择是使用 pushd 而不是 cd。然后popd会带你回去。

您还可以更改您的个人资料,以便每当出现新提示时(基本上是在您按 Enter 键时)。它将获取 PWD 并将其与前一个进行比较。如果它们不同,则将该值放入堆栈。然后您将在您的配置文件中包含另一个函数,称为 cdb 之类的东西,它将从堆栈中弹出最后一个项目并将其 cd 到它。

这听起来很有趣,所以我想出了一个解决方案。将所有这些代码放入您的个人资料 ( about_Profiles )。

[System.Collections.Stack]$GLOBAL:dirStack = @()
$GLOBAL:oldDir = ''
$GLOBAL:addToStack = $true
function prompt
{
    Write-Host "PS $(get-location)>"  -NoNewLine -foregroundcolor Magenta
    $GLOBAL:nowPath = (Get-Location).Path
    if(($nowPath -ne $oldDir) -AND $GLOBAL:addToStack){
        $GLOBAL:dirStack.Push($oldDir)
        $GLOBAL:oldDir = $nowPath
    }
    $GLOBAL:AddToStack = $true
    return ' '
}
function BackOneDir{
    $lastDir = $GLOBAL:dirStack.Pop()
    $GLOBAL:addToStack = $false
    cd $lastDir
}
Set-Alias bd BackOneDir
Run Code Online (Sandbox Code Playgroud)

现在您可以像平常一样使用 cd,bd 将带您回到位置历史记录中的位置。

  • 或者,你*可以*将 `cd` 别名为 `pushd`,将 `bd` 别名为 `popd` :P (13认同)

th1*_*ey3 16

只是试图cd -Powershell Core 6.2.2和它的作品:)

cd - 带您回顾您的位置记录

cd + 带您浏览位置历史记录

  • `help cd` ... `PowerShell 6.2 添加了对带有 Path 参数的“-”和“+”的支持。PowerShell 维护了可以使用 - 和 + [原文如此] 访问的最后 20 个位置的历史记录。此列表独立于使用 StackName 参数访问的位置堆栈。` 好! (5认同)

Oli*_*gey 12

我对 cd +/- 的运气有所不同,尽管它应该可以工作。

pushd并且popd已经存在很长一段时间并且很好地完成工作,但我不确定它们是否在 Powershell 中得到正式支持 - 我刚刚发现它们实际上是别名Push-LocationPop-Location因此是当前和受支持的,似乎是最好的方法去:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/push-location?view=powershell-7 https://docs.microsoft.com/en-us/powershell/module /microsoft.powershell.management/pop-location?view=powershell-7

之前建议使用别名来替换标准cd命令是一个好主意,但在脚本编写中,为了清楚起见,我只是使用真实的 cmdlet 名称。

有效的示例:

cd B:\MyFolder\MySubFolder\
Push-Location
Set-Location Env:
cd B:\
Pop-Location
Run Code Online (Sandbox Code Playgroud)

返回到 B:\MyFolder\MySubFolder\

不起作用的示例:

cd B:\MyFolder\MySubFolder\
Push-Location
Set-Location Env:
Pop-Location
Run Code Online (Sandbox Code Playgroud)

失败 - (需要将驱动器更改回推送的位置)

推送位置和弹出位置似乎是“LIFO”(后进先出)