windows - Windows 路径中多个反斜杠的记录行为

标签 windows batch-file command-line path

显然,Windows(或至少是 Windows 的某些部分)会忽略路径中的多个反斜杠并将它们视为单个反斜杠。例如,从命令提示符或运行窗口中执行任何这些命令都会打开记事本:

C:\Windows\System32\Notepad.exe
C:\Windows\System32\\Notepad.exe
C:\Windows\System32\\\Notepad.exe
C:\Windows\System32\\\\Notepad.exe
C:\\Windows\\System32\\Notepad.exe
C:\\\Windows\\\System32\\\Notepad.exe

这甚至可以处理在命令行上传递的参数:

notepad "C:\Users\username\Desktop\\\\myfile.txt"

是否在任何地方记录了此行为?我尝试了几次搜索,但只找到了 this所以问题甚至提到了这种行为。

注意:我不是在询问 UNC 路径 (\\servername)、\\?\前缀或\\"双引号转义符。

注意:我在处理批处理文件时偶然发现了这种行为。批处理文件中的一行看起来像这样:

"%SOME_PATH%\myapp.exe"

变量扩展后,命令如下:

"C:\Program Files\Vendor\MyApp\\myapp.exe"

令我惊讶的是,批处理文件按预期执行并且没有因某种“找不到路径”错误而失败。

最佳答案

在大多数情况下,Win32 API 函数将接受路径名格式的多种变体,包括根据当前目录或每个驱动器的当前目录将相对路径转换为绝对路径,将单个点解释为“此目录”和两个点作为“父目录”,将正斜杠转换为反斜杠,并删除多余的反斜杠和尾随句点。

有点像

c:\documents\..\code.\\working\.\myprogram\\\runme.exe..

将结束解释为

c:\code\working\myprogram\runme.exe

Some of this is documented ,有些不是。 (正如汉斯指出的那样,记录这种变通方法可以使错误的做法合法化。)

请注意,这适用于 Win32 API,不一定适用于每个应用程序,甚至不一定适用于每个系统组件。特别是,命令解释器在处理长路径时有更严格的规则,Explorer 不会接受点或双点,通常也不会接受正斜杠。此外,如果服务器未运行 Windows,则网络驱动器的规则可能会有所不同。

关于windows - Windows 路径中多个反斜杠的记录行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33027024/

相关文章:

windows - 如果批处理文件中的条件

powershell - 将 powershell 命令的输出存储在变量中

使用批处理脚本搜索和排序目录和子目录

linux - 如何在命令行中使用单个命令运行一系列命令?

c# - 是否可以从 Visual Studio 编译 C# 程序以在 Mac 上运行?

c++ - 处理消息太慢,导致 UI 不稳定、无响应 - 如何使用多线程来缓解这种情况?

c - C 中的程序在 OS X 上有问题,但在 Windows 上没有

windows - 批量选择菜单?

linux 根据最近修改的文件创建符号链接(symbolic link)

windows - 在 Windows 命令行中使用 Chrome 中的 'Copy as cURL'