Muda o diretório para o diretório anterior em Powershell

23

Eu sou um cara do Linux, mas estou tentando ter a mente aberta e aprender um pouco de Powershell. Sinto falta da capacidade de cd - voltar para um diretório anterior, como em shells * nix. Existe um comando similar no Powershell - um que me permita retornar ao meu diretório anterior?

    
por Kazark 10.05.2013 / 18:09

3 respostas

19

Não exatamente da mesma forma que eu conheço. Uma opção é usar o pushd em vez do cd. Então o popd vai te levar de volta.

Você também pode alterar seu perfil para que sempre que um novo prompt apareça (basicamente sempre que você pressionar Enter). Ele pegaria a PWD e compararia com a anterior. Se forem diferentes, coloque esse valor em uma pilha. Então você incluiria outra função no seu perfil chamada algo como cdb que iria colocar o último item fora da pilha e cd para ele.

Isso soou divertido, então eu criei uma uma solução. Coloque todo esse código em seu perfil ( about_Profiles ).

[System.Collections.Stack]$GLOBAL:dirStack = @()
$GLOBAL:oldDir = ''
$GLOBAL:addToStack = $true
function prompt
{
    Write-Host "PS $(get-location)>"  -NoNewLine -foregroundcolor Magenta
    $GLOBAL:nowPath = (Get-Location).Path
    if(($nowPath -ne $oldDir) -AND $GLOBAL:addToStack){
        $GLOBAL:dirStack.Push($oldDir)
        $GLOBAL:oldDir = $nowPath
    }
    $GLOBAL:AddToStack = $true
    return ' '
}
function BackOneDir{
    $lastDir = $GLOBAL:dirStack.Pop()
    $GLOBAL:addToStack = $false
    cd $lastDir
}
Set-Alias bd BackOneDir

Agora você pode fazer um cd como normal e o bd o levará de volta ao local no seu histórico de localização.

    
por 10.05.2013 / 18:11
2

A solução rápida e suja é o alias cd e bd a pushd e popd . Uma limitação é que você não pode fazer o equivalente a cd - de novo e de novo.

Set-Alias -Name cd -Value pushd  -Option AllScope
Set-Alias -Name bd -Value popd  -Option AllScope
    
por 25.05.2017 / 04:45
1

Eu modifiquei o grande script do EBGreen para que cd- sempre leve você ao diretório anterior em vez de revertendo seu histórico . Dessa forma, usar cd- várias vezes alternará entre dois diretórios - que é o que o cd - faz em shells unix.

$GLOBAL:previousDir = ''
$GLOBAL:currentDir = ''
function prompt
{
    Write-Host "PS $(get-location)>"  -NoNewLine -foregroundcolor Green
    $GLOBAL:nowPath = (Get-Location).Path
    if($nowPath -ne $GLOBAL:currentDir){
        $GLOBAL:previousDir = $GLOBAL:currentDir
        $GLOBAL:currentDir = $nowPath
    }
    return ' '
}
function BackOneDir{
    cd $GLOBAL:previousDir
}
Set-Alias cd- BackOneDir

Oh e eu tive que mudar a cor do prompt para verde:)

    
por 02.03.2018 / 11:43