web-dev-qa-db-ja.com

ディレクトリをPowershellの前のディレクトリに変更します

私はLinuxの男ですが、オープンマインドでPowershellを学ぼうとしています。 cd - * nixシェルのように、前のディレクトリに戻ります。 Powershellに同様のコマンドはありますか?以前のディレクトリに戻ることができますか?

32
Kazark

私が知っているのとまったく同じ方法ではありません。 1つのオプションは、cdの代わりにpushdを使用することです。その後、popdが戻ります。

新しいプロンプトが表示されたとき(基本的にEnterキーを押したとき)になるようにプロファイルを変更することもできます。 PWDを取得し、それを以前のものと比較します。それらが異なる場合は、その値をスタックに入れます。次に、cdbのような名前の別の関数をプロファイルに含め、スタックから最後の項目をポップしてcdします。

これは楽しそうだったので、aソリューションを思いつきました。このすべてのコードをプロファイルに追加します( 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を使用すると、ロケーション履歴の場所に戻ります。

19
EBGreen

ちょうど試してみましたcd - オン Powershell Core 6.2.2と動作します:)

cd -ロケーション履歴を元に戻します

cd +ロケーション履歴を表示します

6
th1rdey3

すばやく簡単な解決策は、cdおよびbdpushdおよびpopdにエイリアスすることです。制限として、cd -に相当する操作を何度も繰り返すことはできません。

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

私は EBGreenの素晴らしいスクリプト を変更して、cd-は、履歴を逆にするのではなく、常に前のディレクトリに移動します。このように、cd-複数回実行すると、2つのディレクトリが切り替わります-これが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

ああ、私はプロンプトの色を緑に変更する必要がありました:)

2
nitzel

また、コントロールrを使用してコマンド履歴を検索し、cdコマンドを入力した前回の時間を見つけることもできます。

0
js2010