Powershell'deki dizini önceki dizine değiştir


31

Ben Linux'lu bir adamım ama açık fikirli olmaya ve biraz Powershell öğrenmeye çalışıyorum. cd -* Nix kabukları gibi, önceki bir dizine geri dönme yeteneğini özlüyorum . Powershell'de, önceki dizime dönmeme izin verecek bir benzer komut var mı?


5
pushdYeni bir dizine gitmek için kullanmak olsaydınız popd, öncekine geri dönebilirsiniz. Bu Bash, PowerShell ve hatta eski Windows komut satırında çalışır.
Bob,

1
İlgili (Windows, PowerShell veya bu komutun doğrudan eşdeğeri hakkında bir soru sormamakla birlikte, tam bir kopya değil): Yukarı çıkmak yerine önceki dizine nasıl geçebilirim?
Bob

Yanıtlar:


19

Tam olarak farkında olduğum şekilde değil. Bir seçenek cd yerine pushd kullanmaktır. Sonra popd seni geri götürecek.

Ayrıca, profilinizi yeni bir bilgi istemi geldiğinde (temelde girdiğiniz her seferde) görünecek şekilde değiştirebilirsiniz. PWD'yi alır ve bunu öncekiyle karşılaştırırdı. Farklılarsa, bu değeri bir yığına koyun. Daha sonra profilinize cdb gibi bir şey eklersiniz, bu da en son öğeyi yığından çıkarır ve cd.

Kulağa eğlenceli geliyordu, ben de bir çözüm buldum . Tüm bu kodu profilinize ekleyin ( 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

Şimdi normal bir cd gibi cd yapabilirsiniz ve bd sizi konum geçmişinizdeki konuma geri götürür.


11
Veya, olabilir sadece takma cdiçin pushdve bdiçin popdP:
Bob

1
Bunun hakkında düşündüm. Ben sadece standart bir takma ad ile monkeying için yeni bir yöntem yapmayı tercih ederim. Hangisi tercih edilirse elbette iyidir. Ben olarak takdim yüzden olurdu bir çözelti yerine çözümü.
EBGreen

Orijinal afişle aynı soruyu sorguladım ve @EBGreen tarafından sunulan fonksiyon tanımlarını yapıştırdım.
nomadrc

3

Hızlı ve kirli çözüm takma etmektir cdve bdkarşı pushdve popd. Bir sınırlama cd -tekrar tekrar eşdeğerini yapamazsınız .

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

3

Sadece denenmiş cd -üzerinde Powershell Core 6.2.2ve işe yarıyor :)

cd - sizi konum geçmişinize geri götürür

cd + sizi konum geçmişinizde yönlendirir


2

EBGreen'in harika senaryosunu değiştirdim, böylece sizi geçmişinizde tersine çevirmek yerinecd- her zaman bir önceki dizine götüreceksiniz . Bu şekilde, cd-birden çok kez kullanmak, iki dizin arasında geçiş yapacaktır - bu, cd -unix kabukları için de geçerlidir.

$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 ve ben istem rengini yeşile değiştirmek zorunda kaldık :)


0

Ayrıca komut geçmişinizi kontrol r ile arayabilir ve cd komutuna daha önce girdiğiniz zamanı bulabilirsiniz.


Bu, senaryoların bir alt kümesi için işe yarar. Göreceli yollarla seyahat etme eğiliminde olduğum için çoğu zaman işe yaramayacaktı.
Kazark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.