您可以用-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:\
这是一个相当不错的功能:-)希望这是内置的!我倾向于使用env变量和制表符完成导航,但这就像在你的shell上有后退和前进按钮:-) – 2012-03-28 05:02:13
这看起来很有趣,在某些方面比bash的'push + n'命令提供的swapn功能更好。 – Omnifarious 2012-03-28 22:18:37