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

标签 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 以打开。

我还没有找到任何相关文档,我很困惑,请解释一下这个行为。

最佳答案

当您指定带有驱动器号但没有初始反斜杠的路径时,它通常被解释为指定驱动器上当前目录的相对路径。特别是,这是普通 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 会自行验证给定的路径,无论出于何种原因,它都不允许驱动器相对路径。如果该路径被视为无效,或未指向实际文件/文件夹,则默认操作是打开用户的文档文件夹。

关于驱动器号和冒号后没有斜杠的 Windows 路径 - 它指向什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23955968/

相关文章:

windows - Visual Studio Express 2013 for windows with update 2 安装在 "Configuring Your System"中花费太多时间

windows - QtService 应用程序作为服务运行时无法连接到系统总线

powershell - 在 Power-Shell 中转义双引号字符时如何处理空格键

powershell - about_Foreach 示例 : cmd subroutine syntax in PowerShell?

windows - 如何打开 Windows 资源管理器并将文件路径保存到 Matlab 中的文本框?

jQuery/Ajax 内容未在资源管理器中显示/加载

windows - 如何使 F# 脚本文件和其他脚本语言在 Windows 中像 .exe、.cmd 和 .bat 文件一样工作

c - 如何在 C 中导入 DLL 函数?

c - 如何处理 "dir"的输出?

powershell - 表格格式、列顺序