thư mục C: vs thư mục C: \


17

Tôi đã vô tình thấy rằng nếu tôi làm:

dir C:\

Tôi nhận được một danh sách các tệp là con trực tiếp của ổ C: trong thư mục gốc.

Tuy nhiên, nếu tôi làm:

dir C:

Tôi nhận được một danh sách lớn các tệp mà tôi thậm chí không chắc chúng ở đâu (DLL, EXE, CPL, v.v.).

Bạn có biết tại sao điều này xảy ra và danh sách này đến từ đâu không?


10
dir c:trả về danh sách các tập tin trong thư mục hiện tại của bạn
chơi chữ

2
@ The_IT_Guy_You_Don't_Like Trừ khi bạn đang ở trên một ổ đĩa khác nhau, trong đó trường hợp tưởng tượng mỗi ổ đĩa có một thư mục hiện hành, vì vậy nếu bạn đang ở trên Q: \ nó show cho bất kì thư mục "bạn đang ở" trên C.
barlop

3
@BrianDrummond Không. Sai 100%. Mỗi ổ đĩa trong phiên Windows có thư mục làm việc độc lập riêng cho mỗi quy trình. Nó hoàn toàn không có một tên thư mục làm việc cho tất cả các ổ đĩa. Thử nó.
Andrew Medico

@AndrewMedico Tôi phải khai thác một cái gì đó với Windows để xác nhận - có lẽ tôi đang nhớ DOS, LOL! Vì vậy, tôi sẽ trì hoãn với bạn. Bình luận đã bị xóa.
Brian Drumond

Câu trả lời:


19

Chỉ định DIR locationsẽ cho bạn thấy nội dung của địa điểm.

Chỉ định C:trên nhiều lệnh, bao gồm DIRlệnh, tham chiếu đến ổ C và tham chiếu đến thư mục hiện tại. Để xem thư mục hiện tại của bạn, gõ này:

c: 
cd

Các cdlệnh thường được sử dụng để thay đổi mà thư mục là hiện tại. Tuy nhiên, trong MS-DOS (và các hệ điều hành tương tự, bao gồm Microsoft Windows hiện đại, nhưng không bao gồm Unix), việc cdtự chạy sẽ hiển thị cho bạn thư mục hiện tại.

Trong tất cả các khả năng, nếu bạn chưa sử dụng cdlệnh, thì thư mục hiện tại của bạn có thể là thư mục mà hệ điều hành của bạn đã được cài đặt. (Ít nhất, đó là một hành vi phổ biến cho các hệ thống Microsoft Windows.)

Bạn có thể làm được việc này:

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

Điều đó sẽ cho bạn thấy nội dung của C:\Program Files

Tương tự, bạn có thể làm một cái gì đó như: copy C:*.*và tất cả nội dung từ thư mục hiện tại sẽ được sao chép.

Khi bạn chỉ định C:\, thì dấu gạch chéo ngược chỉ ra thư mục "root", còn được gọi là thư mục "cấp cao nhất". Điều đó có thể, hoặc có thể không, giống như thư mục hiện tại của bạn.

Nếu bạn chỉ định DIR \, thì ổ đĩa hiện tại sẽ được giả sử. (Bạn có thể nhập một cái gì đó như C:hoặc D:, như toàn bộ lệnh (trên một dòng), để thay đổi ổ đĩa nào được coi là "ổ đĩa hiện tại".) Nếu bạn chỉ định DIR, thì ổ đĩa hiện tại và thư mục hiện tại sẽ là giả định.


Ồ vâng! Điều này làm cho tất cả các ý nghĩa. Cảm ơn rât nhiều. Tôi quen thuộc hơn với unix shell, không có loại hành vi này. Và vâng, tôi đã không sử dụng "cd" trong phiên đó, vì vậy nội dung được hiển thị là từ "C: \ WINDOWS \ system32". Rất trân trọng.
Nuno

21

TL; DR - dir C:sẽ liệt kê thư mục hiện tại vào C:bất cứ điều gì xảy ra, trái ngược với dir C:\danh sách sẽ luôn liệt kê \gốc của C:.

Câu chuyện dài ... Tại dấu nhắc dòng lệnh, cmdhãy nhớ thư mục hiện tại cho mỗi ổ đĩa mà nó truy cập trong phiên.

Có thể đặt thư mục hiện tại trên một ổ đĩa X:khác với ổ đĩa hiện tại cd X:\etc(không có công /dtắc cũng sẽ thay đổi ổ đĩa hiện tại thành X:) và được trả về bởi cd X:(không có a \) - cả hai đều được ghi chú trong cd /?trợ giúp:

Nhập ổ đĩa CD: để hiển thị thư mục hiện tại trong ổ đĩa được chỉ định.

Sử dụng công tắc / D để thay đổi ổ đĩa hiện tại ngoài việc thay đổi thư mục hiện tại cho ổ đĩa.

Xem tại sao mỗi ổ đĩa có thư mục hiện tại của riêng mình? cho nền, bao gồm cả trích dẫn này.

Ghi nhớ thư mục hiện tại cho mỗi ổ đĩa đã được bảo tồn kể từ [ nb DOS ], ít nhất là đối với các tệp bó, mặc dù thực tế không có khái niệm nào như thư mục hiện tại trên mỗi ổ đĩa trong Win32. Trong Win32, tất cả những gì bạn có là một thư mục hiện tại. Sự xuất hiện của mỗi ổ đĩa có thư mục hiện tại của riêng nó là giả mạo bởi cmd.exe, sử dụng các biến môi trường lạ để tạo ảo giác cho các tệp bó mà mỗi ổ đĩa có thư mục hiện tại của riêng nó.

Các strange environment variablesđề cập đến trong bài được liên kết Những biến lạ = C: môi trường này là gì? có thể được nhìn thấy set ""tại dấu nhắc cmd, ví dụ:

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: sẽ liệt kê thư mục hiện tại trên C: - để biết thêm chi tiết, nếu bạn chưa đặt thư mục hiện tại trên C: thì giả sử đó là phân vùng hệ thống của bạn (tệp đang giữ các tệp Windows) và tùy thuộc vào cách bạn đã đăng nhập và là người dùng nào và phiên bản nào của windows, thư mục hiện tại mặc định sẽ là thư mục chính của bối cảnh người dùng hiện tại ( c:\Users\<you>) c:\windows\system32hoặc c:\windows\temp. Không bao giờ thừa nhận bất kỳ điều nào trong số này: luôn luôn nêu hoặc chuyển sang thư mục bạn muốn xem thay vì dựa vào bất kỳ mặc định cụ thể nào được áp dụng nhất quán.
David Spillett

5

Lý do bạn nhận được hai thư mục khác nhau là đơn giản. Các \là sự khác biệt.

dir C:\đang yêu cầu danh sách thư mục của Cổ đĩa tại nó \. \là thư mục gốc.

dir C:đang yêu cầu danh sách thư mục của nơi bạn đang ở (hoặc cuối cùng, nếu bạn thay đổi ổ đĩa)

Nếu bạn đang ở trên Cổ đĩa và chỉ cần gõ dirvà nhấn enter, bạn sẽ nhận được cùng một nội dung dir C:. Nếu bạn đang ở trên một ổ đĩa khác và gõ C:để quay lại Cổ đĩa, thì bạn sẽ kết thúc trong thư mục mà bạn đã thấy khi bạn nhập dir C:.


0

Vì đây không phải là StackOverflow, nên đây chỉ là một nhận xét, nhưng nó không phù hợp :.

.NET Framework (có lẽ qua Win32) không phản ánh thư mục hiện hành đối với các ổ đĩa hiện hành:

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

Bạn đang chạy hai lệnh với nhau. c:bản thân nó là một lệnh để thay đổi thành VỊ TRÍ TRƯỚC trên ổ C :. Vì vậy, nó sẽ giữ vị trí trước khi bạn thay đổi ổ đĩa bằng cách sử dụng d:hoặc e:. dirlà một lệnh được sử dụng để liệt kê nội dung của một thư mục.

Vì vậy, về cơ bản, bạn đang liệt kê nội dung của thư mục trước đó trên ổ C: mặc dù bạn đang ở trên một ổ đĩa khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.