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

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

我是一名 Linux 用户,但我正在尝试保持开放的心态并学习一些 Powershell。我怀念cd -像 *nix shell 那样返回上一个目录的功能。Powershell 中是否有类似的命令 — 允许我返回上一个目录?

答案1

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

pushd并且popd已经存在很长时间了并且做得很好,但我不确定它们是否在 Powershell 中得到官方支持——我刚刚发现它们实际上是别名,Push-Location因此Pop-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

返回到 B:\MyFolder\MySubFolder\

无效的示例:

cd B:\MyFolder\MySubFolder\
Push-Location
Set-Location Env:
Pop-Location

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

Push-Location 和 Pop-Location 似乎是“LIFO”(后进先出)

答案2

刚刚尝试cd -Powershell Core 6.2.2,效果很好 :)

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

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

答案3

据我所知,方式并不完全相同。一种选择是使用 pushd 而不是 cd。然后 popd 会带您返回。

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

这听起来很有趣,所以我想出了A解决方案。将所有这些代码放入您的个人资料中(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

现在您可以像平常一样 cd 并且 bd 会带您回到位置历史记录中的位置。

答案4

快速而肮脏的解决方案是将cdand别名bdpushdand popd。但限制在于你不能cd -一遍又一遍地做等价的事情。

Set-Alias -Name cd -Value pushd  -Option AllScope -Force
Set-Alias -Name bd -Value popd  -Option AllScope

相关内容