dir C: vs dir C: \

17

Ich habe versehentlich festgestellt, dass, wenn ich tue:

dir C:\

Ich erhalte im Stammverzeichnis eine Liste der Dateien, die direkte untergeordnete Elemente des Laufwerks C: sind.

Wenn ich jedoch tue:

dir C:

Ich erhalte eine riesige Liste von Dateien, bei denen ich nicht einmal sicher bin, wo sie sich befinden (DLLs, EXEs, CPLs usw.).

Wissen Sie, warum das passiert und woher diese Liste kommt?

Nuno
quelle
10
dir c:gibt die Liste der Dateien in Ihrem aktuellen Verzeichnis zurück
Wortspiel
2
@ The_IT_Guy_You_Don't_Like Es sei denn , du bist auf einem anderen Laufwerk, wobei jeder Antrieb vorstellen , ein aktuelles Verzeichnis hat, wenn Sie also auf Q sind: \ es zeigt aus welchem Verzeichnis „Sie sind in“ auf C
barlop
3
@ BrianDrummond Nein. 100% falsch. Jedes Laufwerk in einer Windows-Sitzung verfügt pro Prozess über ein eigenes unabhängiges Arbeitsverzeichnis. Es gibt absolut keinen einzigen Arbeitsverzeichnisnamen für alle Laufwerke. Versuch es.
Andrew Medico
@ AndrewMedico Ich müsste etwas mit Windows ausgraben, um zu bestätigen - vielleicht erinnere ich mich an DOS, LOL! also werde ich dir aufschieben. Kommentar gelöscht.
Brian Drummond

Antworten:

19

Wenn DIR locationSie angeben, wird der Inhalt des Speicherorts angezeigt .

Die Angabe C:bei vielen Befehlen, einschließlich des DIRBefehls, bezieht sich auf das Laufwerk C und auf das aktuelle Verzeichnis. Geben Sie Folgendes ein, um Ihr aktuelles Verzeichnis anzuzeigen:

c: 
cd

Der cdBefehl wird normalerweise verwendet, um das aktuelle Verzeichnis zu ändern. Unter MS-DOS (und ähnlichen Betriebssystemen, einschließlich modernem Microsoft Windows, jedoch ohne Unix) cdwird Ihnen jedoch das aktuelle Verzeichnis angezeigt, wenn Sie das Programm selbst ausführen .

Wenn Sie den cdBefehl nicht verwendet haben, ist Ihr aktuelles Verzeichnis höchstwahrscheinlich das Verzeichnis, in das Ihr Betriebssystem installiert wurde. (Zumindest ist dies bei Microsoft Windows-Systemen ein weit verbreitetes Verhalten.)

Du kannst das:

cd "C:\Program Files"
cd
dir c:

Das zeigt Ihnen den Inhalt von C:\Program Files

Ebenso können Sie Folgendes tun: copy C:*.*und alle Inhalte aus dem aktuellen Verzeichnis werden kopiert.

Wenn Sie angeben C:\, gibt der Backslash das "Root" -Verzeichnis an, das auch als "Top Level" -Verzeichnis bezeichnet wird. Das kann mit Ihrem aktuellen Verzeichnis identisch sein oder auch nicht.

Wenn Sie nur angeben DIR \, wird das aktuelle Laufwerk angenommen. (Sie können so etwas wie C:oder D:als ganzen Befehl (in einer eigenen Zeile) eingeben, um zu ändern, welches Laufwerk als "aktuelles Laufwerk" betrachtet wird.) Wenn Sie nur angeben DIR, werden das aktuelle Laufwerk und das aktuelle Verzeichnis angezeigt angenommen.

TOOGAM
quelle
Oh ja! Das macht Sinn. Vielen Dank. Ich kenne mich viel besser mit Unix-Shell aus, die sich nicht so verhält. Und ja, ich habe in dieser Sitzung nicht "cd" verwendet, daher stammen die angezeigten Inhalte aus "C: \ WINDOWS \ system32". Sehr freundliche Grüße.
Nuno
21

TL; DR - dir C:listet das aktuelle Verzeichnis auf, C:egal in welchem Verzeichnis es sich befindet, und dir C:\nicht immer das \Stammverzeichnis von C:.

Lange Geschichte ... cmdErinnert sich an der Eingabeaufforderung an das aktuelle Verzeichnis für jedes Laufwerk, auf das während der Sitzung zugegriffen wurde.

Das aktuelle Verzeichnis auf einem X:anderen als dem aktuellen Laufwerk kann mit cd X:\etc(ohne den /dSchalter, mit dem auch das aktuelle Laufwerk geändert wird X:) festgelegt werden und wird von cd X:(ohne a \) zurückgegeben - beides wird in der cd /?Hilfe angegeben:

Typ CD-Laufwerk: Zeigt das aktuelle Verzeichnis im angegebenen Laufwerk an.

Verwenden Sie die Option / D, um das aktuelle Laufwerk und das aktuelle Verzeichnis für ein Laufwerk zu ändern.

Siehe Warum hat jedes Laufwerk ein eigenes aktuelles Verzeichnis? für den Hintergrund, einschließlich dieses Zitats.

Das Speichern des aktuellen Verzeichnisses für jedes Laufwerk wurde seit [ nb DOS ] beibehalten , zumindest für Batch-Dateien, obwohl es in Win32 kein Konzept für ein aktuelles Verzeichnis pro Laufwerk gibt. In Win32 haben Sie lediglich ein aktuelles Verzeichnis. Die Darstellung, dass jedes Laufwerk über ein eigenes aktuelles Verzeichnis verfügt, ist eine Fälschung von cmd.exe, die mithilfe seltsamer Umgebungsvariablen die Illusion erzeugt, dass für jedes Laufwerk ein eigenes aktuelles Verzeichnis vorhanden ist.

Auf strange environment variablesdie im verlinkten Beitrag verwiesen wird. Was sind diese seltsamen = C: Umgebungsvariablen? kann mit set ""der Eingabeaufforderung cmd angezeigt werden, zum Beispiel:

C:\temp>cd X:\etc

C:\temp>cd C:
C:\temp

C:\temp>cd X:
X:\etc

C:\temp>set ""
=C:=C:\temp
=X:=X:\etc
ALLUSERSPROFILE=C:\ProgramData
[...]
dxiv
quelle
1
dir C: listet das aktuelle Verzeichnis auf C: - für zusätzliche Details, wenn Sie das aktuelle Verzeichnis nicht auf C: festgelegt haben, vorausgesetzt, es ist Ihre Systempartition (diejenige, die Windows-Dateien enthält) und je nachdem, wie Sie sich befinden & als welcher Benutzer & welche Windows-Version angemeldet ist, ist das aktuelle Standardverzeichnis entweder das Ausgangsverzeichnis des aktuellen Benutzerkontexts ( c:\Users\<you>) c:\windows\system32oder c:\windows\temp. Gehen Sie jedoch niemals davon aus: Geben Sie immer das Verzeichnis an, in dem Sie sich befinden möchten, oder wechseln Sie zu dem Verzeichnis, in dem Sie sich befinden möchten, anstatt sich darauf zu verlassen, dass ein bestimmter Standard konsistent angewendet wird.
David Spillett
5

Der Grund, warum Sie zwei verschiedene Verzeichnisse erhalten, ist einfach. Das \ist der Unterschied.

dir C:\fragt nach der Verzeichnisliste des CLaufwerks auf seiner \. \ist der Stammordner.

dir C:fragt nach dem Verzeichnis, in dem Sie sich befinden (oder zuletzt waren, wenn Sie das Laufwerk gewechselt haben)

Wenn Sie auf dem CLaufwerk sind und nur tippen dirund drücken enter, erhalten Sie den gleichen Inhalt von dir C:. Wenn Sie sich auf einem anderen Laufwerk befinden und C:auf das CLaufwerk zurückwechseln möchten, landen Sie in dem Verzeichnis, das Sie bei der Eingabe gesehen haben dir C:.

Keltari
quelle
0

Da dies kein StackOverflow ist, sollte dies bestenfalls ein Kommentar sein, der jedoch nicht passt :.

Das .NET Framework (möglicherweise über Win32) gibt das aktuelle Verzeichnis für das aktuelle Laufwerk wieder:

> (curdir)
C:\Utils\DotLisp\My Stuff
> (.FullName (DirectoryInfo. "C:"))
C:\Utils\DotLisp\My Stuff
> (.FullName (DirectoryInfo. "G:"))
G:\
> (set (curdir) "G:/Temp/Emails")
G:/Temp/Emails
> (curdir)
G:\Temp\Emails
> (.FullName (DirectoryInfo. "G:"))
G:\Temp\Emails
> (.FullName (DirectoryInfo. "C:"))
C:\
Mark Hurd
quelle
0

Sie führen zwei Befehle zusammen aus. c:ist selbst ein Befehl zum Wechseln in den vorherigen Speicherort auf dem Laufwerk C :. Es würde also den Speicherort enthalten, bevor Sie die Laufwerke mit d:oder wechseln e:. dirist ein Befehl zum Auflisten des Inhalts eines Verzeichnisses.

Sie listen also im Grunde den Inhalt Ihres vorherigen Ordners auf Laufwerk C: auf, obwohl Sie sich auf einem anderen Laufwerk befinden.

kaushikC
quelle