Navigieren Sie in der Windows-Eingabeaufforderung zum vorherigen Verzeichnis

39

Gibt es einen Befehl / ein Tool zum Navigieren im vorherigen Verzeichnis in der Windows-Eingabeaufforderung?

In der Regel unter Linux verwenden

cd -

für die vorherige Verzeichnisnavigation.

ukanth
quelle

Antworten:

27

Speichern Sie das Folgende, um z. mycd.batirgendwo auf deinem Weg:

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

Denken Sie dann immer daran, Verzeichnisse und Laufwerke zu ändern, mycdanstatt cdzu verwenden.

Verwenden Sie alternativ ein doskeyMakro:

C:\>doskey cd=mycd $*

Die einzige Einschränkung ist, wenn Sie das Leerzeichen zwischen cdund ..oder weglassen \, erhalten Sie die eingebaute Version und cdnicht das doskeyMakro ... und Sie müssen immer noch daran denken C:, D:usw. nicht zu verwenden , um das Laufwerk zu wechseln.

Hugh Allen
quelle
Es sieht so aus, als ob es nicht funktionieren sollte, aber es funktioniert. OLDPWD wird richtig eingestellt.
Hugh Allen
2
+1 Das ist schön, es funktioniert! aber schmerzlich, mycd (oder whtevr) zu verwenden
ukanth
@HughAllen kann ein doskey Makro für cd machen \ und cd .. doskey cd \ = cd \ oder doskey cd \ = c: \ mycd.bat \ doskey C: = c: \ mycd.bat C:
barlop
Diese Fledermaus schlägt für c: \ blah.bat% USERPROFILE% fehl (also schlagen cd oder cdd% USERPROFILE% fehl). Um dies zu beheben, ändern Sie einfache Anführungszeichen in doppelte Anführungszeichen.
Barlop
39

Sie können pushd und popd verwenden:

C: \ WINDOWS> pushd \
C: \> popd
C: \ WINDOWS>
John T
quelle
Thx John, aber das ist nicht genau das, wonach ich suche.
UKANTH
2
Es ist genau das, was ich für meine Batch-Skripte möchte, danke. Es wechselt sogar die Laufwerke, ohne den \ d-Schalter zu benötigen
Deebster
2
Warnung Bei müssen pushd/popdSie die Möglichkeit von Fehlern berücksichtigen . Wenn Sie in einem Skript pushdein Verzeichnis haben, das nicht existiert, wird es nicht im Stapel beendet, aber wenn Sie popdeine Ebene verlassen: Variable nicht richtig gefüllt, Druckfehler, falsches Laufwerk ... Sie denken, dass Sie sich in einem anderen Verzeichnis befinden von der, in der Sie sich befinden, mit schwerwiegenden Problemen, z. B. beim Löschen von Dateien / Verzeichnissen. Disaster (Linux-Syntax): cd $HOME; mkdir A; pushd A; mkdir B; pushd D; do stuff (in A, you believe in B); popd; rm -rf * Sie glauben an A, aber ... zu spät ist Ihr gesamtes Home-Verzeichnis verschwunden.
Hastur
4

Wenn Sie die Batchdatei ausführen, können Sie sie verwenden

  cd /D  %~dp0

Dadurch wird zum ursprünglichen Pfad zurückgesprungen, von dem aus die Batchdatei ausgeführt wurde

ggonsalv
quelle
4

Wenn Sie das genaue Verhalten von bash möchten, warum nicht bash verwenden? Ich habe Cygwin installiert und es ist sehr schön. Sie müssen sich nicht an die UNIX-Tools halten, sondern rufen alle ausführbaren Windows-Dateien auf. Für cmd.exeBuiltins können Sie einen Alias ​​erstellen:

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
quelle
3

Es ist ein Freeware - cmdKlon mit zusätzlichen Funktionen einschließlich cd -namens Take Command Console LE .

Alt-Text

Hugh Allen
quelle
Dies funktioniert nicht
ukanth
2
@TiNS: OK, ich habe es gerade ausprobiert und es hat bei mir funktioniert. Was hat es für dich getan?
Hugh Allen
Ich habe es mit der Konsole versucht (vom Hauptfenster aus)
ukanth
1
@TiNS: Mir ist nicht klar, was Sie getan haben, aber vielleicht hilft dieser Screenshot? (Antwort aktualisiert)
Hugh Allen
1

Abhängig von Ihrem Ziel können Sie einfach eine neue cmd-Sitzung starten, indem Sie "cmd" ausführen, das Verzeichnis verschieben und alles tun, was Sie möchten. Wenn Sie dann "exit" ausführen, verlassen Sie die Sitzung wieder in dem Verzeichnis, in dem Sie sich befanden Sie haben die neue Sitzung gestartet.

user210211
quelle
1

Die akzeptierte Antwort ist sehr gut für die Anforderung. Dabei muss ich oft zwischen vielen neueren Verzeichnissen wechseln, anstatt nur zwischen zwei (aktuellen und vorherigen).

Deshalb habe ich kürzlich eine Serie erstellt, um meine täglichen Aufgaben zu vereinfachen. https://gist.github.com/programus/2d2738b2a746140186f7738b678bdcec

Programus
quelle
Es ist so einfach zu tippen cdx :. Vielen Dank! Es sollte die am besten bewertete Antwort sein.
AndreyWD
0

Was ich tue ist

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%
amphibient
quelle