dir C: vs dir C: \

17

J'ai accidentellement découvert que si je le fais:

dir C:\

J'obtiens une liste de fichiers qui sont des enfants directs du lecteur C:, à la racine.

Cependant, si je le fais:

dir C:

Je reçois une énorme liste de fichiers dont je ne sais même pas où ils se trouvent (DLL, EXE, CPL, etc.).

Savez-vous pourquoi cela se produit et d'où vient cette liste?

Nuno
la source
10
dir c:renvoie la liste des fichiers dans votre répertoire actuel
jeu de mots
2
@ The_IT_Guy_You_Don't_Like Sauf si vous êtes sur un lecteur différent, auquel cas imaginez que chaque lecteur possède un répertoire actuel, donc si vous êtes sur Q: \ il apparaît pour le répertoire dans lequel vous vous trouvez sur C.
barlop
3
@BrianDrummond Nope. 100% faux. Chaque lecteur d'une session Windows possède son propre répertoire de travail indépendant par processus. Il n'a absolument aucun nom de répertoire de travail unique pour tous les lecteurs. Essayez-le.
Andrew Medico
@AndrewMedico Je devrais trouver quelque chose avec Windows pour confirmer - peut-être que je me souviens de DOS, LOL! donc je m'en remets à vous. Commentaire supprimé.
Brian Drummond

Réponses:

19

La spécification DIR locationvous montrera le contenu de l'emplacement.

La spécification C:de nombreuses commandes, y compris la DIRcommande, fait référence au lecteur C et fait référence au répertoire en cours. Pour voir votre répertoire actuel, tapez ceci:

c: 
cd

La cdcommande est généralement utilisée pour modifier le répertoire en cours. Cependant, dans MS-DOS (et les systèmes d'exploitation similaires, y compris Microsoft Windows moderne, mais pas Unix), le fonctionnement cden lui-même vous montrera le répertoire actuel.

Selon toute probabilité, si vous n'avez pas utilisé la cdcommande, votre répertoire actuel est probablement le répertoire dans lequel votre système d'exploitation a été installé. (Du moins, c'est un comportement courant pour les systèmes Microsoft Windows.)

Tu peux le faire:

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

Cela vous montrera le contenu de C:\Program Files

De même, vous pouvez faire quelque chose comme: copy C:*.*et tout le contenu du répertoire courant sera copié.

Lorsque vous spécifiez C:\, la barre oblique inverse indique le répertoire "racine", également appelé répertoire "de niveau supérieur". Cela peut ou non être la même chose que votre répertoire actuel.

Si vous spécifiez simplement DIR \, le lecteur actuel sera supposé. (Vous pouvez taper quelque chose comme C:ou D:, en tant que commande entière (sur une ligne seule), pour changer le lecteur considéré comme le "lecteur actuel".) Si vous spécifiez simplement DIR, le lecteur actuel et le répertoire actuel seront assumé.

TOOGAM
la source
Oh oui! Cela a tout son sens. Merci beaucoup. Je connais beaucoup mieux le shell Unix, qui n'a pas ce genre de comportement. Et oui, je n'ai pas utilisé "cd" dans cette session, donc le contenu affiché était de "C: \ WINDOWS \ system32". Cordialement.
Nuno
21

TL; DR - dir C:listera le répertoire courant sur C:tout ce qui se trouve, par opposition à dir C:\qui listera toujours la \racine de C:.

Longue histoire ... À l'invite de ligne de commande, se cmdsouvient du répertoire actuel pour chaque lecteur auquel il a accédé pendant la session.

Le répertoire en cours sur un lecteur X:autre que le lecteur en cours peut être défini avec cd X:\etc(sans le /dcommutateur qui changerait également le lecteur en cours X:) et est renvoyé par cd X:(sans a \) - tous deux indiqués dans l' cd /?aide:

Tapez lecteur de CD: pour afficher le répertoire actuel dans le lecteur spécifié.

Utilisez le commutateur / D pour modifier le lecteur actuel en plus de modifier le répertoire actuel d'un lecteur.

Voir Pourquoi chaque lecteur possède-t-il son propre répertoire actuel? pour le fond, y compris cette citation.

Se souvenir du répertoire actuel pour chaque lecteur a été préservé depuis [ nb DOS ], au moins pour les fichiers de commandes, bien qu'il n'y ait pas réellement un tel concept comme un répertoire actuel par lecteur dans Win32. Dans Win32, tout ce que vous avez est un répertoire courant. L'apparence que chaque lecteur a son propre répertoire actuel est un faux par cmd.exe, qui utilise des variables d'environnement étranges pour créer l'illusion de fichiers batch que chaque lecteur a son propre répertoire actuel.

Le strange environment variablesréférencé dans le post lié Quelles sont ces variables d'environnement étranges = C:? peut être vu avec set ""à l'invite cmd, par exemple:

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
la source
1
dir C: listera le répertoire en cours sur C: - pour plus de détails, si vous n'avez pas du tout défini le répertoire en cours sur C: en supposant qu'il s'agit de votre partition système (celle contenant les fichiers Windows) et en fonction de la façon dont vous êtes connecté & comme quel utilisateur & quelle version de windows, le répertoire courant par défaut sera soit le répertoire personnel du contexte utilisateur courant ( c:\Users\<you>), c:\windows\system32soit c:\windows\temp. Cependant, ne supposez jamais rien de tout cela: indiquez toujours le répertoire que vous souhaitez consulter ou basculez vers celui-ci au lieu de vous fier à l'application par défaut d'un défaut particulier.
David Spillett
5

La raison pour laquelle vous obtenez deux répertoires différents est simple. C'est \la différence.

dir C:\demande la liste des répertoires du Clecteur à son emplacement \. \est le dossier racine.

dir C:demande la liste du répertoire où vous vous trouvez (ou était le dernier, si vous avez changé de lecteur)

Si vous êtes sur le Clecteur et que vous tapez diret appuyez enter, vous obtiendrez le même contenu dir C:. Si vous êtes sur un autre lecteur et tapez C:pour revenir au Clecteur, vous vous retrouverez dans le répertoire que vous avez vu lorsque vous avez tapé dir C:.

Keltari
la source
0

Comme ce n'est pas StackOverflow, cela ne devrait être qu'un commentaire, au mieux, mais cela ne correspond pas:.

Le .NET Framework (peut - être via Win32) ne reflète le répertoire courant pour le lecteur en cours:

> (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
la source
0

Vous exécutez deux commandes ensemble. c:est en soi une commande pour passer à l'emplacement précédent sur le lecteur C :. Il conserverait donc l'emplacement avant de changer de lecteur à l'aide de d:ou e:. direst une commande utilisée pour répertorier le contenu d'un répertoire.

Donc, fondamentalement, vous répertoriez le contenu de votre dossier précédent sur le lecteur C: même si vous êtes sur un autre lecteur.

kaushikC
la source