gpt4 book ai didi

windows - 如何使用类似 forth 的交换操作来操纵 PowerShell 的位置堆栈?

转载 作者:可可西里 更新时间:2023-11-01 12:38:16 26 4
gpt4 key购买 nike

在 PowerShell 中,您可以使用 pushd(Push-Location 的别名)和 popd(Pop-Location 的别名) ) 将项目插入位置堆栈或从位置堆栈弹出项目。

这与 bash 的 pushdpopd 目录堆栈功能非常相似。

但是 bash 的另一个不错的特性是您可以单独使用 pushd 来交换堆栈的顶部两个位置。因此,您可以在一个位置和另一个位置之间快速来回切换。它还需要一个参数,例如 pushd +3,因此您可以与堆栈中几个元素下方的位置进行交换。

有没有办法用 PowerShell 做到这一点?

例如,在 bash 中:

$ pwd
/bin
$ pushd ~
~ /bin
$ pwd
/home/hopper
$ pushd
/bin ~
$ pwd
/bin
$ pushd
~ /bin
$ pwd
/home/hopper

最佳答案

您可以使用带有 -Stack 开关的 Get-Location 来访问您的堆栈。由于堆栈的性质,它是 LIFO。 Get-Location -Stack 创建一个 System.Management.Automation.PathInfoStack 对象,因此您可以像这样访问各个堆栈项:

  • $stack.ToArray()[-1] :获取第一个推送的项目。
  • $stack.ToArray()[0] :获取最后推送的项目。与 $stack.Peek() 相同。

所以答案是 Push-Location 没有内置开关来修改堆栈顺序,但您可以创建一个函数来执行此操作。请注意,这会操纵默认堆栈。顾名思义,您可以使用 Push-Location -StackName MyStack 创建自己的堆栈。您甚至可以使用 Set-Location -StackName MyStack 将默认堆栈更改为自定义堆栈。

尽管我没有使用 Pop/Push cmdlet,但我没有找到设置堆栈对象的方法。所以我不得不以一种比我能做到的更困难的方式来实现它……但是这里有一个小函数可以让你交换堆栈的顶部两个路径。

function Swap-StackTop {
param ($StackName = "default")
$origPath = $PWD
$stack = Get-Location -StackName $StackName
$stackArray = $stack.ToArray()
$last = $stackArray[0]
$beforeLast = $stackArray[1]
$stackArray[0] = $beforeLast
$stackArray[1] = $last
$stackArray | % {Pop-Location}
Set-Location -Path $stackArray[-1].Path
$stackArray[($stackArray.Count-2)..0] | % {
Push-Location $_.Path
}
Push-Location -Path $origPath.Path
}

cd C:\
Push-Location 'C:\Users'
Push-Location 'C:\Program Files'
Push-Location C:\Windows
Get-Location -Stack

输出:

Path
----
C:\Program Files
C:\Users
C:\

现在交换前两个路径:

Swap-StackTop
Get-Location -Stack

输出:

Path
----
C:\Users
C:\Program Files
C:\

关于windows - 如何使用类似 forth 的交换操作来操纵 PowerShell 的位置堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9898977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com