Przejdź do poprzedniego katalogu w wierszu polecenia systemu Windows

39

Czy jest jakieś polecenie / narzędzie do nawigacji w poprzednim katalogu w wierszu poleceń systemu Windows?

W Linuksie zwykle używaj

cd -

do poprzedniej nawigacji w katalogu.

ukanth
źródło

Odpowiedzi:

27

Zapisz następujące elementy np. mycd.batgdzieś na twojej drodze:

@echo off
if '%*'=='' cd & exit /b
if '%*'=='-' (
    cd /d %OLDPWD%
    set OLDPWD=%cd%
) else (
    cd /d %*
    if not errorlevel 1 set OLDPWD=%cd%
)

Zawsze pamiętaj, aby używać mycdzamiast cdzmieniać katalogi i dyski.

Możesz też użyć doskeymakra:

C:\>doskey cd=mycd $*

Jedynym zastrzeżeniem jest to, jeśli pominąć przestrzeń pomiędzy cdi ..czy \będzie można dostać wersję wbudowanego w cdnie z doskeymakro ... a trzeba jeszcze pamiętać, aby nie wykorzystania C:, D:itp zmienić dysk.

Hugh Allen
źródło
Wygląda na to, że nie powinno działać, ale działa. OLDPWD zostanie ustawiony poprawnie.
Hugh Allen,
2
+1 To jest fajne, działa! ale bolesne w użyciu mycd (lub whtevr)
ukanth
@HughAllen może utworzyć makro doskey dla cd \ i cd .. doskey cd \ = cd \ lub doskey cd \ = c: \ mycd.bat \ doskey C: = c: \ mycd.bat C:
barlop
Ten nietoperz zawiedzie dla c: \ blah.bat% USERPROFILE% (więc cd lub cdd% USERPROFILE% zawiedzie). Aby to naprawić, zmień pojedyncze cudzysłowy na podwójne.
barlop
39

Możesz użyć pushd i popd:

C: \ WINDOWS> pushd \
C: \> popd
C: \ WINDOWS>
John T.
źródło
Dzięki John, ale to nie jest dokładnie to, czego szukam.
ukanth
2
Właśnie tego chcę od moich skryptów wsadowych, dzięki. Zmienia nawet dyski bez potrzeby przełączania \ d
Deebster
2
Ostrzeżenie z pushd/popdwas musiał taktowny możliwość błędów . W skrypcie, gdy pushdkatalog, który nie istnieje, nie skończy się na stosie, ale gdy wyjdziesz popdz jednego poziomu: zmienna nie jest poprawnie wypełniona, źle drukowana, niewłaściwy dysk ... Myślisz, że jesteś w innym katalogu od tego, w którym jesteś, z poważnym problemem, np. kiedy usuwasz pliki / katalogi. Awaria (składnia Linuksa): cd $HOME; mkdir A; pushd A; mkdir B; pushd D; do stuff (in A, you believe in B); popd; rm -rf * wierzysz w A, ale ... za późno, cały katalog domowy zniknął.
Hastur
4

jeśli uruchamiasz plik wsadowy, możesz użyć

  cd /D  %~dp0

Spowoduje to powrót do oryginalnej ścieżki, z której uruchomiono plik wsadowy

ggonsalv
źródło
4

Jeśli chcesz dokładnego zachowania bash, dlaczego nie użyć bash? Mam zainstalowany Cygwin i jest bardzo fajny. Nie zmusza Cię do trzymania się narzędzi UNIX - z przyjemnością wywoła dowolny plik wykonywalny systemu Windows. W przypadku cmd.exewbudowanych możesz utworzyć alias:

hugh@comp07 ~/testdir                             
$ alias cm='cmd /c'                               

hugh@comp07 ~/testdir                             
$ cm dir                                          
 Volume in drive C has no label.                  
 Volume Serial Number is AC2A-8378                

 Directory of C:\cygwin\home\hugh\testdir         

18/05/2010  02:02 PM    <DIR>          .          
18/05/2010  02:02 PM    <DIR>          ..         
               0 File(s)              0 bytes     
               2 Dir(s)   1,365,155,840 bytes free

hugh@comp07 ~/testdir                             
$ 
Hugh Allen
źródło
3

Istnieje darmowy cmdklon z dodatkowymi funkcjami, w tym o cd -nazwie Take Command Console LE .

alternatywny tekst

Hugh Allen
źródło
To nie działa
ukanth
2
@TiNS: OK Właśnie próbowałem i zadziałało dla mnie. Co ci to zrobiło?
Hugh Allen
Próbowałem z konsolą (z głównego okna)
ukanth
1
@TiNS: Nie jestem pewien, co zrobiłeś, ale może ten zrzut ekranu pomoże? (odpowiedź zaktualizowana)
Hugh Allen
1

W zależności od tego, jaki jest twój cel, możesz po prostu rozpocząć nową sesję cmd, wykonując polecenie „cmd”, przenieść katalog i zrobić, co chcesz, a następnie opuścić sesję, aby opuścić sesję, a następnie powrócisz do katalogu, w którym byłeś rozpocząłeś nową sesję.

użytkownik210211
źródło
1

Przyjęta odpowiedź jest bardzo dobra dla tego wymagania. Chociaż często muszę przełączać się między wieloma nowymi katalogami zamiast tylko dwóch (obecnych i poprzednich).

Niedawno przygotowałem partię, aby ułatwić sobie codzienną pracę. https://gist.github.com/programus/2d2738b2a746140186f7738b678bdcec

Program
źródło
To takie łatwe do pisania cdx :. Dzięki! Powinna to być najbardziej pozytywna odpowiedź.
AndreyWD
0

To co robię jest

rem capture the path of the initial dir
set RET_DIR=%CD%
rem do stuff...
rem and then return to the initial dir
cd %RET_DIR%
amfibia
źródło