Змініть каталог до попереднього каталогу в Powershell


31

Я хлопець з Linux, але намагаюся бути відкритим і навчитися деякому Powershell. Мені не вистачає можливості cd -повернутися до попереднього каталогу, як у * nix оболонках. Чи є в Powershell подібна команда, яка дозволила б мені повернутися до попереднього каталогу?


5
Якщо ви використовували pushdдля переходу до нового каталогу, ви можете popdповернутися до попереднього. Це працює в Bash, PowerShell і навіть у застарілому командному рядку Windows.
Боб

1
Пов’язані (хоч і не запитують про Windows, PowerShell або прямий еквівалент цієї команди, тому не точний дублікат): Як я можу змінитись до попереднього каталогу, а не підніматися?
Боб

Відповіді:


19

Не точно так, як мені відомо. Один із варіантів - використовувати pushd замість CD. Тоді попд поверне тебе назад.

Ви також можете змінити свій профіль, щоб кожен раз з'являвся новий запит (в основному, коли ви натискаєте клавішу 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

Тепер ви можете створити компакт-диск, як звичайний, і bd поверне вас до місцеположення в історії ваших локацій.


11
Або ви могли б просто псевдонім , cdщоб pushdі bdдо popd: P
Bob

1
Я про це думав. Я просто віддаю перевагу зробити новий метод маніпулювання стандартним псевдонімом. Що б краще не було, звичайно. Це було б , чому я представив його як в розчині , а не в розчині.
EBGreen

У мене був такий самий запит, що і в оригінальному плакаті, і я закінчив вставляти у визначені функції, запропоновані @EBGreen.
nomadrc

3

Швидкий і брудний розчин є псевдонімом cdі bdдо pushdі popd. Обмеження полягає в тому, що ви не можете робити еквівалент cd -знову і знову.

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

3

Тільки що спробував cd -на Powershell Core 6.2.2і це працює :)

cd - повертає вас до історії ваших локацій

cd + перенесе вас вперед через вашу історію місцезнаходжень


2

Я змінив чудовий сценарій 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

О, і мені довелося змінити підказковий колір на зелений :)


0

Ви також можете шукати історію ваших команд з керуванням r та знаходити попередній раз, коли ви ввели команду cd.


Це буде працювати для підмножини сценаріїв. Оскільки я, як правило, подорожую відносними стежками, це не спрацювало б багато часу.
Казарк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.