在PowerShell中,您可以使用pushd
( Push-Location
的别名)和popd
( Pop-Location
的别名)将项目推送到位置堆栈并将其popup项目。
这与bash的pushd
和popd
function非常类似,用于一堆目录。
但是bash的另外一个很好的特性是你可以使用pushd
来交换堆栈中最上面两个位置。 所以你可以很快地在一个地方和另一个地方来回翻转。 而且它也需要pushd +3
这样的参数,所以你可以在堆栈中的某个位置进行交换。
有没有办法用PowerShell做到这一点?
举个例子,在bash中:
$ pwd /bin $ pushd ~ ~ /bin $ pwd /home/hopper $ pushd /bin ~ $ pwd /bin $ pushd ~ /bin $ pwd /home/hopper
多年来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库中找到: