dir C: vs dir C: \


17

Descobri acidentalmente que, se o fizer:

dir C:\

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

No entanto, se eu fizer:

dir C:

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

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


10
dir c:retorna a lista de arquivos no diretório atual
pun

2
@ The_IT_Guy_You_Don't_Like A menos que você esteja em uma unidade diferente; nesse caso, imagine que cada unidade tenha um diretório atual; portanto, se você estiver em Q: \, ele será
exibido

3
@BrianDrummond Nope. 100% errado. Cada unidade em uma sessão do Windows tem seu próprio diretório de trabalho independente por processo. Absolutamente não possui um único nome de diretório de trabalho para todas as unidades. Tente.
Andrew Medico

@AndrewMedico Eu teria que descobrir algo com o Windows para confirmar - talvez eu esteja lembrando do DOS, risos! então eu vou adiar para você. Comentário deletado.
Brian Drummond

Respostas:


19

A especificação DIR locationmostrará o conteúdo do local.

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

c: 
cd

O cdcomando geralmente é usado para alterar qual diretório é atual. No entanto, no MS-DOS (e sistemas operacionais similares, incluindo o Microsoft Windows moderno, mas não o Unix), a execução cdpor si só mostrará o diretório atual.

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

Você consegue 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 "raiz", também conhecido como diretório "nível superior". Isso pode ou não ser o mesmo que seu diretório atual.

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


Oh sim! Isso faz todo o sentido. Muito obrigado. Estou muito mais familiarizado com o shell unix, que não tem esse tipo de comportamento. E sim, eu não usei "cd" nessa sessão; portanto, o conteúdo mostrado era de "C: \ WINDOWS \ system32". Atenciosamente.
Nuno

21

TL; DR - dir C:listará o diretório atual no C:que quer que seja, ao contrário do dir C:\qual sempre listará a \raiz do C:.

Longa história ... No prompt da linha de comando, cmdlembra 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 /dopção que também mudaria a unidade atual X:) e é retornado por cd X:(sem a \) - ambos observados na cd /?ajuda:

Digite drive de CD: para exibir o diretório atual na unidade especificada.

Use a opção / D para alterar a unidade atual , além de alterar o diretório atual de uma unidade.

Consulte Por que cada unidade tem seu próprio diretório atual? para obter mais informações, incluindo esta citação.

Lembrar que o diretório atual de cada unidade foi preservado desde o [ nb DOS ], pelo menos para arquivos em lotes, embora não exista um conceito como o diretório atual por unidade no Win32. No Win32, tudo o que você tem é um diretório atual. A aparência de que cada unidade possui seu próprio diretório atual é uma falsificação do cmd.exe, que usa variáveis ​​de ambiente estranhas para criar a ilusão de arquivos em lote de que cada unidade possui seu próprio diretório atual.

O strange environment variablesreferido no post vinculado Quais são essas variáveis ​​de ambiente estranhas = C:? pode ser visto 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
[...]

1
dir C: listará o diretório atual em C: - para obter detalhes adicionais, se você não tiver definido o diretório atual em C: assumindo que seja a partição do sistema (a que contém os arquivos do Windows) e dependendo de como você está registrado e como qual usuário e qual versão do Windows, o diretório atual padrão será o diretório inicial do contexto atual do usuário ( c:\Users\<you>) c:\windows\system32ou c:\windows\temp. Porém, nunca assuma nada disso: sempre declare ou alterne para o diretório que deseja examinar, em vez de confiar em qualquer padrão específico sendo aplicado de forma consistente.
precisa

5

A razão pela qual você está recebendo dois diretórios diferentes é simples. A \é a diferença.

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

dir C:está solicitando a lista de diretórios de onde você está (ou foi a última, se você mudou de unidade)

Se você estiver na Cunidade e apenas digitar dire clicar enter, obterá o mesmo conteúdo de dir C:. Se você estiver em uma unidade diferente e digitar C:para voltar à Cunidade, você terminará no diretório que viu quando digitou dir C:.


0

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

O .NET Framework (talvez via Win32) faz refletir 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:\

0

Você está executando dois comandos juntos. c:é, por si só, um comando para alterar para o PREVIOUS LOCATION 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 de sua pasta anterior na unidade C:, mesmo estando em outra unidade.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.