如何使用第四种交换操作来操作PowerShell的位置堆栈?

在PowerShell中,您可以使用pushdPush-Location的别名)和popdPop-Location的别名)将项目推送到位置堆栈并将其popup项目。

这与bash的pushdpopdfunction非常类似,用于一堆目录。

但是bash的另外一个很好的特性是你可以使用pushd来交换堆栈中最上面两个位置。 所以你可以很快地在一个地方和另一个地方来回翻转。 而且它也需要pushd +3这样的参数,所以你可以在堆栈中的某个位置进行交换。

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

举个例子,在bash中:

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

Solutions Collecting From Web of "如何使用第四种交换操作来操作PowerShell的位置堆栈?"

多年来PowerShell社区扩展内置了类似的功能:-)例如:

 48> cd C:\ inetpub
 C:\的Inetpub
 49> cd C:\ Windows \ System32
 C:\ Windows \ System32下
 50> cd  - 
 C:\的Inetpub
 51> cd +
 C:\ Windows \ System32下
 52> cd

      #号码簿:
    --- ----------------
      0 C:\ Users \ Keith
      1 C:\ inetpub
 - > 2 C:\ Windows \ System32

 cd> 0
 C:\用户\基思

虽然这不是一个交换,但是现在的( – )和(+)隐喻已经相当成熟了。 您可以通过指定-<num>跳转到位置历史记录中的任何位置。 事实上,这是PSCX用户提出的一个非常方便的补充,你可以把CD放到一个文件文件(只是文件所在的目录),例如:

 cd $profile 

为了在PSCX中启用此功能,您必须在导入模块时指定Pscx.UserPreference.ps1文件,例如:

 Import-modulee PSCX -arg ~\Pscx.UserPreferences.ps1 

在这种情况下,我将文件从PSCX目录复制到我的主目录并进行修改以适合我的口味。 欲了解更多信息执行:

 cd -? 

要么

 man cd -full 

这个嵌套模块的完整源代码就在这里(在CodePlex上) 。

您可以使用Get-Location-Stack开关访问您的堆栈。 作为一个堆栈的本质是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:\ 

谢谢, 基思山 , CD.psm1模块!

我采用了基本的堆栈代码,并使用更类似PowerShell的语法来实现它。 我也修改了一下,以便在堆栈中间改变位置时保留堆栈条目。 对于任何感兴趣的人,都可以在PowerShell库中找到:

https://www.powershellgallery.com/packages/LocationHistory/