驱动器号和冒号后没有斜线的路径 - 它指向什么?

时间:2014-05-30 13:38:21

标签: windows powershell explorer

我错误地输入了一条路径而不是c:\foo.txt写了c:foo.txt。我预计它会失败或要求解析为c:\foo.txt,但它似乎已解析为当前用户的主文件夹中的foo.txt

Powershell返回:

PS C:\> [System.IO.Path]::GetFullPath("c:\foo.txt")
c:\foo.txt
PS C:\> [System.IO.Path]::GetFullPath("c:foo.txt")
C:\Users\Administrator\foo.txt
PS C:\> [System.IO.Path]::GetFullPath("g:foo.txt")
G:\foo.txt

从命令行运行explorer.exe并将上述任何结果传递给要打开的C:\ Users \ Administrator \ Documents。

我还没有找到任何相关文档,我完全糊涂了,请解释一下这个行为。

4 个答案:

答案 0 :(得分:7)

如果指定带有驱动器号但没有初始反斜杠的路径,则通常被解释为指定驱动器上当前目录的相对路径。特别是,这是普通的Win32 API文件函数将如何解释它;因此,大多数将未修改的文件路径传递给Win32文件函数的软件也会以这种方式运行。

在我的机器上,这在PowerShell中按预期工作,除了一个复杂功能:

C:\Users\social>powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\social> [System.IO.Path]::GetFullPath("c:foo.txt")
C:\Users\social\foo.txt
PS C:\Users\social> cd \
PS C:\> [System.IO.Path]::GetFullPath("c:foo.txt")
C:\Users\social\foo.txt
PS C:\>

我们在这里看到的是,当我们在PowerShell中更改当前目录时,实际上并不会更改当前目录。也就是说,PowerShell对当前目录的含义有自己的想法,但并没有费心去告诉Windows有关这一变化的信息。您可以使用Process Explorer(可以从Microsoft的网站下载)确认这一点;在上述情况下,即使使用cd,PowerShell流程的实际当前目录仍为C:\Users\social

您还提到了资源管理器。尽可能接近,Explorer会对其给出的路径进行自己的验证,无论出于何种原因,它都不允许驱动器相对路径。如果路径不被视为有效,或者未指向实际文件/文件夹,则默认操作是打开用户的Documents文件夹。

答案 1 :(得分:6)

这是标准的DOS / Windows行为,并且一直是这样的。打开命令行并查看:

C:\Users\Tim>d:              # change current drive to d:
D:\>c:                       # change back to c: - back in the same directory
C:\Users\Tim>cd d:\users     # change current directory ON D:
C:\Users\Tim>cd \            # still same directory - backslash leads to top dir
C:\>d:                       # change current drive to d:
D:\Users>                    # notice that we're now in the directory D:\Users

驱动器号始终引用该驱动器的当前目录; (领先)反斜杠将您带到顶级目录。

答案 2 :(得分:3)

它使用该驱动器上的当前工作目录。每个过程都记得"每个驱动器的当前工作目录:

 C:\> cd somepath\subdir
 C:\somepath\subdir>  d:
 D:\> dir c:subsubdir       <--  refers to C:\somepath\subdir\subsubdir

答案 3 :(得分:0)

这是文件/解释,由Harry Johnston comment提供。

MSDN - &gt; Windows桌面应用程序 - &gt; 开发 - &gt; 桌面技术 - &gt; 数据访问和存储 - &gt; 本地文件系统 - &gt; 文件管理 - &gt; 关于文件管理 - &gt; 创建,删除和维护文件 - &gt; 命名文件,路径和命名空间 - &gt; Fully Qualified vs. Relative Paths

  

对于操作文件的Windows API函数,通常可以使用文件名   相对于当前目录,而某些API需要完全   合格的道路。文件名是相对于当前目录的   不会以下列之一开头:

     
      
  • 任何格式的UNC名称,始终以两个反斜杠字符开头(&#34; \&#34;)。有关详细信息,请参阅下一节。
  •   
  • 带有反斜杠的磁盘指示符,例如&#34; C:\&#34;或&#34; d:\&#34;。
  •   
  • 单个反斜杠,例如&#34; \ directory&#34;或&#34; \ file.txt&#34;。这也称为绝对路径。
  •   
     

如果文件名仅以磁盘指示符开头而不是   冒号后的反斜杠,它被解释为相对路径   具有指定字母的驱动器上的当前目录。注意   当前目录可能是也可能不是根目录   在最近的&#34;更改目录&#34;中设置的内容   该磁盘上的操作。此格式的示例如下:

     
      
  • &#34; C:tmp.txt&#34;是指一个名为&#34; tmp.txt&#34;的文件。在驱动器C上的当前目录中。
  •   
  • &#34; C:TEMPDIR \ tmp.txt&#34;指的是驱动器C上当前目录的子目录中的文件。
  •   
     

[...]