Cambiar el directorio al directorio anterior en Powershell

31

Soy un chico de Linux, pero estoy tratando de ser de mente abierta y aprender Powershell. Echo de menos la posibilidad de cd -volver a un directorio anterior, como en shells * nix. ¿Hay un comando similar en Powershell, uno que me permita volver a mi directorio anterior?

Kazark
fuente
55
Si fuera a utilizar pushdpara navegar a un nuevo directorio, podría popdvolver al anterior. Esto funciona en Bash, PowerShell e incluso en la línea de comandos de Windows heredada.
Bob
1
Relacionado (aunque sin preguntar sobre Windows, PowerShell o un equivalente directo de este comando, por lo que no es un duplicado exacto): ¿Cómo puedo cambiar al directorio anterior en lugar de subir?
Bob

Respuestas:

19

No exactamente de la misma manera que yo sepa. Una opción es usar pushd en lugar de cd. Entonces popd te llevará de vuelta.

También puede cambiar su perfil para que cada vez que aparezca un nuevo aviso (básicamente, cada vez que presione enter). Obtendría el PWD y lo compararía con el anterior. Si son diferentes, pon ese valor en una pila. Luego incluiría otra función en su perfil llamada algo como cdb que sacaría el último elemento de la pila y lo colocaría en él.

Esto sonaba divertido, así que se me ocurrió una solución. Ponga todo este código en su 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

Ahora puede cd como de costumbre y bd lo llevará de regreso a su ubicación en su historial de ubicaciones.

EBGreen
fuente
11
O bien, podría simplemente alias cda pushdy bda popd: P
Bob
1
Pensé en eso. Simplemente prefiero hacer un nuevo método a hacer monos con un alias estándar. Lo que prefiera está bien, por supuesto. Por eso lo presenté como una solución y no como la solución.
EBGreen
Tuve exactamente la misma consulta que el póster original y terminé pegando las definiciones de funciones ofrecidas por @EBGreen.
nomadrc
3

La solución rápida y sucia es alias cdy bda pushdy popd. Una limitación es que no puedes hacer el equivalente de cd -una y otra vez.

Set-Alias -Name cd -Value pushd  -Option AllScope
Set-Alias -Name bd -Value popd  -Option AllScope
TankorSmash
fuente
3

Sólo trató cd -sobre Powershell Core 6.2.2y funciona :)

cd - te lleva de vuelta a tu historial de ubicaciones

cd + te lleva a través de tu historial de ubicaciones

th1rdey3
fuente
2

He modificado gran guión de EBGreen de manera que cd-siempre se le llevará a su directorio anterior en lugar de invertir a través de su historia . De esta forma, el uso de cd-varias veces alternará entre dos directorios, que es lo que cd -hace en shells de 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, y tuve que cambiar el color del indicador a verde :)

nitzel
fuente
0

También puede buscar en su historial de comandos con el control r, y encontrar la hora anterior en que ingresó el comando cd.

js2010
fuente
Eso funcionaría para un subconjunto de los escenarios. Como tiendo a viajar con caminos relativos, no funcionaría la mayor parte del tiempo.
Kazark