題 dir C:vs dir C:\


我不小心發現如果我這樣做:

dir C:\

我在根目錄中獲得了C:驅動器的直接子項的文件列表。

但是,如果我這樣做:

dir C:

我得到了一個巨大的文件列表,我甚至不確定它們在哪裡(DLL,EXE,CPL等)。

你知道為什麼會發生這種情況嗎?這個清單來自哪裡?


17
2017-12-20 05:46


起源


dir c: 返回當前目錄中的文件列表 - pun
@ The_IT_Guy_You_Don't_Like除非你在不同的驅動器上,在這種情況下想像每個驅動器都有一個當前目錄,所以如果你在Q:\它顯示在C上的任何目錄“你在”。 - barlop
@BrianDrummond不。 100%錯了。 Windows會話中的每個驅動器每個進程都有自己獨立的工作目錄。它絕對沒有所有驅動器的單個工作目錄名稱。試試吧。 - Andrew Medico
@AndrewMedico我不得不用Windows來確認一些東西 - 也許我記得DOS,哈哈!所以我會順從你。評論已刪除。 - Brian Drummond


答案:


指定 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,然後將假定當前驅動器和當前目錄。


19
2017-12-20 07:50



哦耶!這一切都很有意義。非常感謝你。我對unix shell比較熟悉,它沒有這種行為。是的,我沒有在該會話中使用“cd”,因此顯示的內容來自“C:\ WINDOWS \ system32”。非常友好的問候。 - Nuno


TL; DR  - dir C: 將列出當前目錄 C: 無論發生什麼,相反 dir C:\ 這將永遠列出 \ 的根源 C:

長篇故事......在命令行提示符下, cmd 記住它在會話期間訪問的每個驅動器的當前目錄。

驅動器上的當前目錄 X: 除了當前的一個可以設置 cd X:\etc (沒有 /d 開關,它也會改變當前的驅動器 X:),並由...返回 cd X: (沒有 \) - 兩者都註明了 cd /? 救命:

鍵入CD驅動器:顯示指定驅動器中的當前目錄。

使用/ D開關更改當前驅動器 此外 改變當前   驅動器的目錄。

看到 為什麼每個驅動器都有自己的當前目錄? 為背景,包括這個引用。

自從[記住]每個驅動器的當前目錄以來一直保留注: 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
[...]

21
2017-12-20 08:38



dir C:將列出C上的當前目錄:  - 有關額外的細節,如果你還沒有在C上設置當前目錄:那麼假設它是你的系統分區(持有Windows文件的那個)並且取決於你的登錄方式以及用戶和哪個版本的windows,默認的當前目錄將是當前用戶上下文的主目錄(c:\Users\<you>) c:\windows\system32 要么 c:\windows\temp。永遠不要假設任何這種情況:始終陳述或切換到您想要查看的目錄,而不是依賴於始終如一地應用的任何特定默認值。 - David Spillett


你得到兩個不同目錄的原因很簡單。該 \ 是不同的。

dir C:\ 正在要求的目錄列表 C 開車去吧 \\ 是根文件夾。

dir C: 是要求你的目錄列表  (或者是最後一次,如果你改變了驅動器)

如果你在 C 開車,然後輸入 dir 並擊中 enter,你會得到相同的內容 dir C:。如果您使用的是其他驅動器,請鍵入 C: 改回來 C 驅動器,然後你將最終進入你鍵入時看到的目錄 dir C:


5
2017-12-20 05:56





由於這不是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
2017-12-21 03:48





您正在一起運行兩個命令。 c: 本身是一個命令,用於切換到C:驅動器上的PREVIOUS LOCATION。因此,在使用更改驅動器之前,它將保留位置 d: 要么 e:dir 是用於列出目錄內容的命令。

所以基本上你是在C:驅動器上列出你以前文件夾的內容,即使你在另一個驅動器上。


0
2018-02-18 04:27