Dir C: против Dir C: \

17

Я случайно обнаружил, что если я делаю:

dir C:\

Я получаю список файлов, которые являются прямыми потомками диска C: в корне.

Однако, если я сделаю:

dir C:

Я получаю огромный список файлов, в которых я даже не уверен, где они находятся (DLL, EXE, CPL и т. Д.).

Знаете ли вы, почему это происходит и откуда этот список?

Нуно
источник
10
dir c:возвращает список файлов в вашем текущем каталоге
игра слов
2
@ The_IT_Guy_You_Dont_Like Если вы не находитесь на другом диске, в этом случае представьте, что на каждом диске есть текущий каталог, поэтому, если вы находитесь на Q: \, он показывает для любого каталога, в котором вы находитесь, на C.
barlop
3
@BrianDrummond Нет. 100% неправильно. Каждый диск в сеансе Windows имеет свой независимый рабочий каталог для каждого процесса. У него абсолютно нет единого имени рабочего каталога для всех дисков. Попытайся.
Эндрю Медико
@ AndrewMedico Мне нужно было бы кое-что выяснить с Windows, чтобы подтвердить - может быть, я помню DOS, LOL! поэтому я буду откладывать на вас. Комментарий удален.
Брайан Драммонд

Ответы:

19

Указание DIR locationпокажет вам содержимое локации.

Указание C:для многих команд, включая DIRкоманду, относится к диску C и относится к текущему каталогу. Чтобы увидеть ваш текущий каталог, введите:

c: 
cd

Команда cdобычно используется для изменения текущего каталога. Тем не менее, в MS-DOS (и аналогичных операционных системах, включая современные Microsoft Windows, но не включая Unix), запуск cdсам по себе покажет вам текущий каталог.

По всей вероятности, если вы не использовали cdкоманду, то ваш текущий каталог, вероятно, является каталогом, в который была установлена ​​ваша операционная система. (По крайней мере, это обычное поведение для систем Microsoft Windows.)

Ты можешь сделать это:

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

Это покажет вам содержимое C:\Program Files

Точно так же вы можете сделать что-то вроде: copy C:*.*и все содержимое из текущего каталога будет скопировано.

Когда вы указываете C:\ , то обратная косая черта указывает на корневой каталог, также известный как каталог верхнего уровня. Это может или не может быть то же самое, что ваш текущий каталог.

Если вы просто укажете DIR \, то текущий диск будет принят. (Вы можете ввести что-то вроде C:или D:, как целую команду (в отдельной строке), чтобы изменить, какой диск считается «текущим диском».) Если вы просто укажете DIR, то текущий диск и текущий каталог будут предполагается.

TOOGAM
источник
О, да! Это имеет смысл. Большое спасибо. Я намного больше знаком с оболочкой Unix, у которой нет такого поведения. И да, я не использовал «cd» в этом сеансе, поэтому показанное содержимое было из «C: \ WINDOWS \ system32». Очень добрые пожелания.
Нуно
21

TL; DR - dir C:перечислит текущий каталог во C:что бы то ни стало, в отличие от dir C:\которого всегда будет перечислен \корень C:.

Длинная история ... В командной строке cmdзапоминает текущий каталог для каждого диска, к которому он обращался во время сеанса.

Текущий каталог на диске, X:отличный от текущего, может быть установлен с помощью cd X:\etc(без /dпереключателя, который также изменил бы текущий диск на X:), и возвращается cd X:(без \) - оба отмечены в cd /?справке:

Введите CD drive: для отображения текущего каталога на указанном диске.

Используйте переключатель / D для изменения текущего диска в дополнение к изменению текущего каталога для диска.

См. Почему каждый диск имеет свой текущий каталог? для фона, включая эту цитату.

Запоминание текущего каталога для каждого диска сохранялось со времен [ nb DOS ], по крайней мере, для пакетных файлов, хотя на самом деле в Win32 нет такой концепции, как текущий каталог для каждого диска . В Win32 все, что у вас есть, это текущий каталог. Похоже, что каждый диск имеет свой собственный текущий каталог, это фальшивка cmd.exe, которая использует странные переменные среды, чтобы создать иллюзию для пакетных файлов, в которых каждый диск имеет свой текущий каталог.

strange environment variablesУпоминается в связанном посте Каковы эти странные = C: переменные окружения? можно увидеть set ""в командной строке cmd, например:

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
источник
1
dir C: перечислит текущий каталог на C: - для дополнительной информации, если вы вообще не устанавливали текущий каталог на C:, тогда предположим, что это ваш системный раздел (тот, который содержит файлы Windows) и в зависимости от того, как вы Зарегистрированы как пользователь и какая версия Windows, текущим каталогом по умолчанию будет домашний каталог текущего пользовательского контекста ( c:\Users\<you>), c:\windows\system32или c:\windows\temp. Никогда не предполагайте ничего из этого: всегда указывайте или переключайтесь на каталог, на который вы хотите посмотреть, вместо того чтобы полагаться на то, что какой-то конкретный параметр по умолчанию применяется последовательно.
Дэвид Спиллетт
5

Причина, по которой вы получаете два разных каталога, проста. \ разница.

dir C:\просит список каталогов Cдиска в его \. \это корневая папка

dir C:запрашивает список каталогов, где вы находитесь (или был последним, если вы меняли диски)

Если вы находитесь на Cдиске и просто печатаете dirи нажимаете enter, вы получите то же самое содержимое dir C:. Если вы находитесь на другом диске и печатаете, C:чтобы переключиться обратно на Cдиск, то вы окажетесь в каталоге, который вы видели при вводе dir C:.

Keltari
источник
0

Поскольку это не StackOverflow, в лучшем случае это должен быть только комментарий, но он не подходит :.

.NET Framework (возможно, через Win32) отражает текущий каталог для текущего диска:

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

Вы запускаете две команды вместе. c:сама по себе команда для перехода на ПРЕДЫДУЩЕЕ МЕСТО на диске C :. Таким образом, он будет содержать местоположение до того, как вы смените диск с помощью d:или e:.dirэто команда, используемая для отображения содержимого каталога.

Таким образом, в основном вы размещаете содержимое своей предыдущей папки на диске C: даже если вы находитесь на другом диске.

kaushikC
источник