dir C:vs dir C:\


17

我意外发现,如果这样做:

dir C:\

我在根目录中获得了C:驱动器的直接子文件列表。

但是,如果我这样做:

dir C:

我得到了大量文件,甚至不知道它们在哪里(DLL,EXE,CPL等)。

您知道为什么会发生这种情况吗?此清单来自何处?


10
dir c:返回当前目录中的文件列表
pun

2
@ The_IT_Guy_You_Don't_Like除非你是一个不同的驱动器,在这种情况下,可以想象每个驱动器有一个当前目录,因此如果你在Q上对:\它显示的任何目录“你在”关于C.
barlop

3
@BrianDrummond不。100%错误。Windows会话中的每个驱动器每个进程都有其自己的独立工作目录。对于所有驱动器,它绝对没有单个工作目录名称。尝试一下。
安德鲁·梅迪科

@AndrewMedico我必须使用Windows进行挖掘以进行确认-也许我还记得DOS,哈哈!所以我请你 评论已删除。
Brian Drummond 2015年

Answers:


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,则当前驱动器和当前目录将为假定。


哦耶!这是有道理的。非常感谢你。我对unix shell非常熟悉,它没有这种行为。是的,在该会话中我没有使用“ cd”,因此显示的内容来自“ C:\ WINDOWS \ system32”。很好的问候。
努诺2015年

21

TL; DR - dir C:将列出当前目录C:不管这恰好是,相对于dir C:\将始终列出\的根C:

详细的说...在命令行提示符下,cmd记住会话期间它访问的每个驱动器的当前目录。

X:可以使用cd X:\etc(而不是/d将当前驱动器更改为的开关)设置除当前驱动器之外的驱动器上的当前目录X:,并通过cd X:(不使用\)将其返回-在cd /?帮助中均注明:

键入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\system32c:\windows\temp。但是,永远不要假设任何一种:始终声明或切换到要查看的目录,而不要依赖于始终应用任何特定的默认值。
David Spillett

5

获得两个不同目录的原因很简单。本\的区别。

dir C:\正在要求C驱动器的目录列表\\是根文件夹。

dir C:是要求你在哪里的列出该目录(或最后一次,如果更改驱动器)

如果您在C驱动器上,只需键入dir并点击enter,您将获得与相同的内容dir C:。如果您在其他驱动器上,然后键入C:以更改回该C驱动器,那么您将最终进入键入时看到的目录dir C:


0

由于这不是StackOverflow,因此充其量只能是一条评论,但不适合:。

.NET框架(可能通过的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:驱动器上列出先前文件夹的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.