dir C: проти dir C: \


17

Я випадково виявив, що якщо це робити:

dir C:\

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

Однак якщо мені це зробити:

dir C:

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

Чи знаєте ви, чому це відбувається і звідки цей список?


10
dir c:повертає список файлів в поточному каталозі
каламбур

2
@ The_IT_Guy_You_Don't_Like Якщо ви не перебуваєте на іншому диску, тоді, уявіть, кожен диск має поточний каталог, тож якщо ви перебуваєте на Q: \, це показує для будь-якого каталогу "ви знаходитесь" на C.
barlop

3
@BrianDrummond Nope. На 100% помиляється. Кожен диск у сеансі Windows має свій незалежний робочий каталог за кожним процесом. У ньому абсолютно немає жодної робочої назви каталогів для всіх дисків. Спробуй це.
Андрій Медіко

@AndrewMedico Мені доведеться щось викопати з Windows, щоб підтвердити - можливо, я пам’ятаю DOS, LOL! тому я відкладу вам. Коментар видалено.
Брайан Драммонд

Відповіді:


19

Якщо вказати DIR location, ви побачите вміст розташування.

Вказівка C:на багато команд, включаючи DIRкоманду, відноситься до диска С і посилається на поточний каталог. Щоб переглянути поточний каталог, введіть це:

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:\ , тоді зворотний косий рядок вказує на каталог «root», також відомий як каталог «верхнього рівня». Це може бути, а може і не, те саме, що і у вашому поточному каталозі.

Якщо ви просто вкажете DIR \, тоді буде прийнято вважати поточний привід. (Ви можете ввести щось на кшталт C:або D:, як цілу команду (у самій рядку), щоб змінити, який диск вважається "поточним накопичувачем".) Якщо ви просто вкажете DIR, то поточний диск і поточний каталог будуть припускається.


О так! Це має сенс. Велике спасибі. Я набагато більше знайомий з оболонкою Unix, яка не має такої поведінки. І так, я не використовував "cd" у тому сеансі, тому вміст, що відображався, був із "C: \ WINDOWS \ system32". Дуже привітання.
Нуно

21

TL; DR - dir C:перелічить поточний каталог у C:тому, що трапляється, на відміну від dir C:\цього завжди буде вказано \корінь C:.

Довга історія ... У командному рядку, cmd запам'ятовується поточний каталог для кожного диска, до якого він отримував доступ під час сеансу.

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

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

Використовуйте перемикач / 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
[...]

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:.


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: навіть якщо ви перебуваєте на іншому диску.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.