17

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

dir C:\

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

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

dir C:

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

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

5 ответов5

21

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

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

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

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

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

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

Запоминание текущего каталога для каждого диска сохранялось с тех пор [ nbDOS ], по крайней мере, для пакетных файлов, хотя в 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
[...]
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 , то будут использоваться текущий диск и текущий каталог.

5

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

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

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

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

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: даже если вы находитесь на другом диске.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .