Altere o diretório para o diretório anterior no 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 - de volta 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?

Kazark
fonte
5
Se você fosse usar pushd para navegar para um novo diretório, você poderia popd de volta para o anterior. Isso funciona no Bash, no PowerShell e até na linha de comando legada do Windows.
Bob
1
Relacionado (embora não pergunte sobre o Windows, o PowerShell ou um equivalente direto desse comando, portanto, não uma cópia exata): Como posso mudar para o diretório anterior em vez de subir?
Bob

Respostas:

19

Não exatamente da mesma forma que eu estou ciente. Uma opção é usar o pushd em vez do cd. Entã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 em seu perfil chamada algo como cdb que iria colocar o último item fora da pilha e cd para ele.

Isso soou como diversão, então eu inventei uma solução. Coloque todo este código no 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 cd como normal e bd irá levá-lo de volta ao local no seu histórico de localização.

EBGreen
fonte
11
Ou você poderia apenas alias cd para pushd e bd para popd : P
Bob
1
Eu pensei sobre isso. Eu prefiro apenas fazer um novo método para monkeying com um alias padrão. Qualquer que seja o preferido, tudo bem, claro. Por isso, apresentei como uma solução em vez de a solução.
EBGreen
Eu tive exatamente a mesma pergunta do pôster original e acabei colando nas definições de função oferecidas pelo @EBGreen.
nomad.rc
2

Solução rápida e suja é alias cd e bd para 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
TankorSmash
fonte
1

Eu modifiquei Grande roteiro da EBGreen de modo a cd- sempre levará você para seu diretório anterior em vez de reverter seu histórico . Desta forma, usando cd- várias vezes vai alternar entre dois diretórios - que é o que 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

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

nitzel
fonte