Omn*_*ous 11 windows powershell
在PowerShell中,您可以使用pushd(别名Push-Location)和popd(别名Pop-Location)将项目推送到位置堆栈并从中弹出项目.
这与一堆目录的bash pushd和popd功能非常相似.
但bash的另一个不错的功能是你可以单独使用pushdall来交换堆栈中的前两个位置.因此,您可以在一个位置和另一个位置之间快速来回切换.它也需要一个参数,pushd +3所以你可以交换堆栈中几个元素的位置.
有没有办法用PowerShell做到这一点?
举个例子,在bash中:
$ pwd
/bin
$ pushd ~
~ /bin
$ pwd
/home/hopper
$ pushd
/bin ~
$ pwd
/bin
$ pushd
~ /bin
$ pwd
/home/hopper
Run Code Online (Sandbox Code Playgroud)
您可以通过访问堆栈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
Run Code Online (Sandbox Code Playgroud)
输出:
Path
----
C:\Program Files
C:\Users
C:\
Run Code Online (Sandbox Code Playgroud)
现在交换前两个路径:
Swap-StackTop
Get-Location -Stack
Run Code Online (Sandbox Code Playgroud)
输出:
Path
----
C:\Users
C:\Program Files
C:\
Run Code Online (Sandbox Code Playgroud)
PowerShell Community Extensions内置了类似的功能多年:-)例如:
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
# Directory Stack:
--- ----------------
0 C:\Users\Keith
1 C:\inetpub
-> 2 C:\Windows\System32
53 > cd -0
C:\Users\Keith
虽然它不是一个交换,但是现在已经很好地建立了后向( - )和前向(+)隐喻.您可以通过指定跳至位置历史记录中的任何位置-<num>.事实上,这是PSCX用户建议的一个非常方便的补充,你可以CD到一个文件文件(只是cds到文件所在的目录),例如:
cd $profile
Run Code Online (Sandbox Code Playgroud)
为了在PSCX中启用此功能,您必须在导入模块时指定Pscx.UserPreference.ps1文件,例如:
Import-Module PSCX -arg ~\Pscx.UserPreferences.ps1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将文件从PSCX目录复制到我的家庭目录并修改以适应我的口味.有关更多信息执行:
cd -?
Run Code Online (Sandbox Code Playgroud)
要么
man cd -full
Run Code Online (Sandbox Code Playgroud)
这个嵌套模块的完整源代码在这里(在CodePlex上).