dir C: vs dir C: \

17

Eu acidentalmente descobri que, se eu fizer isso:

dir C:\

Eu recebo uma lista de arquivos que são filhos diretos da unidade C:, na raiz.

No entanto, se eu fizer isso:

dir C:

Eu recebo uma lista enorme de arquivos que eu nem tenho certeza onde eles estão (DLLs, EXEs, CPLs, etc.).

Você sabe por que isso acontece e de onde vem essa lista?

    
por Nuno 20.12.2015 / 06:46

5 respostas

19

Especificar DIR location mostrará o conteúdo do local.

A especificação de C: em muitos comandos, incluindo o comando DIR , refere-se à unidade C e refere-se ao diretório atual. Para ver seu diretório atual, digite:

c: 
cd

O comando cd é normalmente usado para alterar qual diretório é atual. No entanto, no MS-DOS (e sistemas operacionais semelhantes, incluindo o Microsoft Windows moderno, mas não incluindo o Unix), executar cd por si só mostrará o diretório atual.

Com toda a probabilidade, se você não estiver usando o comando cd , o diretório atual provavelmente é o diretório em que o sistema operacional foi instalado. (Pelo menos, esse é um comportamento comum para sistemas Microsoft Windows.)

Você pode fazer isso:

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

Isso mostrará o conteúdo de C:\Program Files

Da mesma forma, você pode fazer algo como: copy C:*.* e todo o conteúdo do diretório atual será copiado.

Quando você especifica C:\ , a barra invertida indica o diretório "root", também conhecido como o diretório "top level". Isso pode ou não ser a mesma coisa que o seu diretório atual.

Se você especificar apenas DIR \ , a unidade atual será assumida. (Você pode digitar algo como C: ou D: , como um comando inteiro (em uma linha sozinho), para alterar qual unidade é considerada a "unidade atual".) Se você especificar apenas DIR , então a unidade atual e o diretório atual serão assumidos.

    
por 20.12.2015 / 08:50
21

TL; DR - dir C: listará o diretório atual em C: o que quer que seja, em oposição a dir C:\ , que sempre listará a raiz \ de C: .

Longa história ... No prompt da linha de comando, cmd lembra o diretório atual de cada unidade acessada durante a sessão.

O diretório atual em uma unidade X: diferente da atual pode ser definido com cd X:\etc (sem a opção /d , que também alteraria a unidade atual para X: ), e é retornado por cd X: (sem \ ) - ambos indicados no cd /? help:

Type CD drive: to display the current directory in the specified drive.

Use the /D switch to change current drive in addition to changing current directory for a drive.

Consulte Por que cada unidade possui seu próprio diretório atual? para informações em segundo plano, incluindo esta citação.

Remembering the current directory for each drive has been preserved ever since [n.b. DOS], at least for batch files, although there isn’t actually such a concept as a per-drive current directory in Win32. In Win32, all you have is a current directory. The appearance that each drive has its own current directory is a fake-out by cmd.exe, which uses strange environment variables to create the illusion to batch files that each drive has its own current directory.

Os strange environment variables referenciados na postagem vinculada Quais são esses estranhos = C: variáveis de ambiente? pode ser visto com set "" no prompt do cmd, por exemplo:

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
[...]
    
por 20.12.2015 / 09:38
5

O motivo pelo qual você está obtendo dois diretórios diferentes é simples. O \ é a diferença.

dir C:\ está solicitando a listagem de diretórios da unidade C em seu \ . \ é a pasta raiz.

dir C: está pedindo a listagem do diretório de onde você está (ou foi a última, se você alterou as unidades)

Se você estiver na unidade C , basta digitar dir e acessar enter para obter o mesmo conteúdo de dir C: . Se você estiver em uma unidade diferente e digitar C: para voltar para a unidade C , você acabará no diretório que viu quando digitou dir C: .

    
por 20.12.2015 / 06:56
0

Como isso não é StackOverflow, isso deve ser apenas um comentário, na melhor das hipóteses, mas não se encaixa:.

O .NET Framework (talvez por meio do Win32) reflete o diretório atual para a unidade atual:

> (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:\
    
por 21.12.2015 / 04:48
0

Você está executando dois comandos juntos. c: é um comando para alterar para o LOCAL ANTERIOR na unidade C :. Portanto, ele manteria o local antes de você alterar as unidades usando d: ou e: . dir é um comando usado para listar o conteúdo de um diretório.

Então basicamente você está listando o conteúdo da sua pasta anterior na unidade C: mesmo que você esteja em outra unidade.

    
por 18.02.2017 / 05:27