24

Я парень из Linux, но пытаюсь быть непредубежденным и изучать немного Powershell. Мне не хватает возможности cd - вернуться к предыдущему каталогу, как в * nix shell. Есть ли в Powershell аналогичная команда, которая позволила бы мне вернуться в мой предыдущий каталог?

3 ответа3

19

Не совсем так, как я знаю. Одним из вариантов является использование pushd вместо cd. Тогда popd вернет вас обратно.

Вы также можете изменить свой профиль так, чтобы каждый раз, когда появлялось новое приглашение (в основном, когда вы нажимаете Enter). Было бы получить PWD и сравнить это с предыдущим. Если они разные, поместите это значение в стек. Затем вы бы включили в свой профиль другую функцию, которая называется что-то вроде cdb, которая вытолкнула бы последний элемент из стека и cd в него.

Это звучало как весело , так что я придумал решение. Поместите весь этот код в свой профиль (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

Теперь вы можете использовать CD так же, как обычно, и BD вернет вас обратно в историю вашего местоположения.

3

Быстрое и грязное решение - использовать псевдонимы cd и bd для pushd и popd . Ограничением является то, что вы не можете делать эквивалент cd - снова и снова.

Set-Alias -Name cd -Value pushd  -Option AllScope
Set-Alias -Name bd -Value popd  -Option AllScope
1

Я изменил отличный скрипт EBGreen, чтобы cd- всегда брал вас в ваш предыдущий каталог, а не перебирал историю. Таким образом, использование cd- несколько раз переключит две директории, что и делает cd - в оболочках 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

Ох, и мне пришлось изменить цвет подсказки на зеленый :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .