web-dev-qa-db-fra.com

Changer le répertoire dans le répertoire précédent dans Powershell

Je suis un gars de Linux, mais j'essaie d'être ouvert d'esprit et d'apprendre Powershell. Je manque la possibilité de cd - dans un répertoire précédent, comme dans les coquilles * nix. Existe-t-il une commande similaire dans Powershell, une commande qui me permettrait de revenir à mon répertoire précédent?

26
Kazark

Pas exactement de la même façon que je le sache. Une option consiste à utiliser pushd au lieu de cd. Ensuite, popd vous ramènera.

Vous pouvez également modifier votre profil afin que chaque fois qu'une nouvelle invite apparaisse (essentiellement chaque fois que vous appuyez sur Entrée). Il obtiendrait le PWD et le comparerait au précédent. S'ils sont différents, mettez cette valeur sur une pile. Ensuite, vous pouvez inclure une autre fonction dans votre profil appelée quelque chose comme cdb, qui extraira le dernier élément de la pile et y cd.

Cela semblait amusant, alors je suis venu avec une solution . Mettez tout ce code dans votre profil ( 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

Maintenant, vous pouvez cd juste comme d'habitude et bd vous ramènera sur place dans votre historique de localisation.

19
EBGreen

La solution rapide et incorrecte consiste à alias cd et bd à pushd et popd. Une limitation est que vous ne pouvez pas faire l'équivalent de cd - encore et encore.

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

J'ai modifié le script génial d'EBGreen afin que cd- vous emmène toujours vers votre répertoire précédent au lieu d'inverser votre historique . De cette façon, utiliser cd- plusieurs fois basculera entre deux répertoires - ce que cd - fait sur les 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 et j'ai dû changer la couleur de l'invite en vert:)

2
nitzel