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


31

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


5
pushd新しいディレクトリに移動するために使用する場合popd、前のディレクトリに戻ることができます。これは、Bash、PowerShell、および従来のWindowsコマンドラインでも機能します。
ボブ

1
関連(ただし、Windows、PowerShell、またはこのコマンドの直接の同等物については聞いていないので、完全に重複しているわけではありません):上に移動する代わりに前のディレクトリに変更するにはどうすればよいですか?
ボブ

回答:


19

私が知っているのとまったく同じ方法ではありません。1つのオプションは、cdの代わりにpushdを使用することです。その後、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はロケーション履歴のロケーションに戻ります。


11
それとも、あなたは可能性だけのエイリアスcdpushdbdpopd:P
ボブ・

1
私はそれについて考えました。私は、標準のエイリアスを使用して、新しいメソッドを作成することを好みます。どちらが望ましいかはもちろん大丈夫です。私のようにそれを提示した理由は以下のようになります解決策ではなく、ソリューション。
EBGreen

元のポスターとまったく同じ質問があり、@ EBGreenが提供する関数定義に貼り付けました。
-nomadrc

3

迅速で汚い解決策は、エイリアスcdを作成bdpushd、にすること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-複数回使用すると、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

ああ、私はプロンプトの色を緑に変更しなければなりませんでした:)


0

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


これは、シナリオのサブセットで機能します。私は相対パスで移動する傾向があるため、ほとんどの時間は機能しません。
カザーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.