dir C: vs dir C: \

17

Accidentalmente descubrí que si lo hago:

dir C:\

Obtengo una lista de archivos que son hijos directos de la unidad C: en la raíz.

Sin embargo, si lo hago:

dir C:

Obtengo una gran lista de archivos que ni siquiera estoy seguro de dónde están (DLL, EXE, CPL, etc.).

¿Sabes por qué sucede esto y de dónde viene esta lista?

Nuno
fuente
10
dir c:devuelve la lista de archivos en su directorio actual
juego de palabras
2
@ The_IT_Guy_You_Don't_Like A menos que esté en una unidad diferente, en cuyo caso imagine que cada unidad tiene un directorio actual, por lo que si está en Q: \ se muestra para cualquier directorio "en el que esté" en C.
barlop
3
@BrianDrummond Nope. 100% equivocado Cada unidad en una sesión de Windows tiene su propio directorio de trabajo independiente por proceso. No tiene un solo nombre de directorio de trabajo para todas las unidades. Intentalo.
Andrew Medico
@AndrewMedico Tendría que desenterrar algo con Windows para confirmar, ¡tal vez estoy recordando DOS, LOL! así que te aplazaré. Comentario borrado.
Brian Drummond

Respuestas:

19

Especificar DIR locationle mostrará el contenido de la ubicación.

La especificación C:de muchos comandos, incluido el DIRcomando, se refiere a la unidad C y al directorio actual. Para ver su directorio actual, escriba esto:

c: 
cd

El cdcomando generalmente se usa para cambiar el directorio actual. Sin embargo, en MS-DOS (y sistemas operativos similares, incluido Microsoft Windows moderno, pero sin incluir Unix), la ejecución cdpor sí solo le mostrará el directorio actual.

Con toda probabilidad, si no ha estado usando el cdcomando, entonces su directorio actual es probablemente el directorio en el que se instaló su sistema operativo. (Al menos, ese es un comportamiento común para los sistemas Microsoft Windows).

Puedes hacerlo:

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

Eso te mostrará el contenido de C:\Program Files

Del mismo modo, puede hacer algo como: copy C:*.*y todo el contenido del directorio actual se copiará.

Cuando especifica C:\, la barra diagonal inversa indica el directorio "raíz", también conocido como el directorio "nivel superior". Eso podría, o no, ser lo mismo que su directorio actual.

Si solo especifica DIR \, se asumirá la unidad actual. (Puede escribir algo como C:o D:, como un comando completo (en una línea sola), para cambiar qué unidad se considera la "unidad actual".) Si solo especifica DIR, la unidad actual y el directorio actual serán ficticio.

TOOGAM
fuente
¡Oh si! Esto tiene todo el sentido. Muchas gracias. Estoy mucho más familiarizado con Unix Shell, que no tiene este tipo de comportamiento. Y sí, no usé "cd" en esa sesión, por lo que el contenido que se muestra era de "C: \ WINDOWS \ system32". Saludos muy amables.
Nuno
21

TL; DR : dir C:enumerará el directorio actual en C:lo que sea que sea, a diferencia de dir C:\lo que siempre enumerará la \raíz de C:.

Larga historia ... En la línea de comandos, cmdrecuerda el directorio actual de cada unidad a la que accedió durante la sesión.

El directorio actual en una unidad que X:no sea la actual se puede configurar con cd X:\etc(sin el /dinterruptor que también cambiaría la unidad actual a X:), y es devuelto por cd X:(sin a \), ambos anotados en la cd /?ayuda:

Escriba unidad de CD: para mostrar el directorio actual en la unidad especificada.

Use el modificador / D para cambiar la unidad actual además de cambiar el directorio actual de una unidad.

Consulte ¿Por qué cada unidad tiene su propio directorio actual? para antecedentes, incluida esta cita.

Recordar que el directorio actual para cada unidad se ha conservado desde [ nb DOS ], al menos para los archivos por lotes, aunque en realidad no existe un concepto como un directorio actual por unidad en Win32. En Win32, todo lo que tiene es un directorio actual. La apariencia de que cada unidad tiene su propio directorio actual es una falsificación de cmd.exe, que utiliza variables de entorno extrañas para crear la ilusión de archivos por lotes de que cada unidad tiene su propio directorio actual.

Lo strange environment variablesmencionado en la publicación vinculada ¿Cuáles son estas extrañas = C: variables de entorno? se puede ver set ""en el indicador de cmd, por ejemplo:

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
fuente
1
dir C: enumerará el directorio actual en C: - para detalles adicionales, si no ha configurado el directorio actual en C: suponiendo que es la partición de su sistema (la que contiene los archivos de Windows) y dependiendo de cómo se encuentre registrado y como qué usuario y qué versión de Windows, el directorio actual predeterminado será el directorio de inicio del contexto de usuario actual ( c:\Users\<you>) c:\windows\system32o c:\windows\temp. Sin embargo, nunca asuma nada de esto: siempre indique o cambie al directorio que desea ver en lugar de confiar en que cualquier valor predeterminado particular se aplique de manera consistente.
David Spillett
5

La razón por la que obtiene dos directorios diferentes es simple. El \es la diferencia.

dir C:\está pidiendo la lista de directorios de la Cunidad en su \. \es la carpeta raíz

dir C:está pidiendo la lista del directorio de dónde se encuentra (o fue el último, si cambió las unidades)

Si está en el Cdisco y simplemente escribe diry presiona enter, obtendrá el mismo contenido de dir C:. Si está en una unidad diferente y escribe C:para volver a cambiar a la Cunidad, terminará en el directorio que vio cuando escribió dir C:.

Keltari
fuente
0

Como esto no es StackOverflow, esto solo debería ser un comentario, en el mejor de los casos, pero no cabe:

.NET Framework (quizás a través de Win32) refleja el directorio actual de la unidad actual:

> (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
fuente
0

Estás ejecutando dos comandos juntos. c:es en sí mismo un comando para cambiar a la UBICACIÓN ANTERIOR en la unidad C:. Por lo tanto, mantendría la ubicación antes de cambiar las unidades con d:o e:. dires un comando utilizado para enumerar el contenido de un directorio.

Básicamente, está enumerando el contenido de su carpeta anterior en la unidad C: aunque esté en otra unidad.

kaushikC
fuente