2015-10-08 36 views
2

显然,Windows(或至少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 SO问题,甚至提到了行为。

注:我不是问UNC路径(\\服务器名),在\\。\前缀,或\\”双引号逃逸

注:我偶然发现了这种行为与工作时。批处理文件批处理文件一号线看起来是这样的:

"%SOME_PATH%\myapp.exe" 

变量扩展后,命令看起来像:

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

令我惊讶的是,作为欲望执行批处理文件d并且没有失败,出现某种“未找到路径”错误。

+4

与大多数软件供应商一样,微软从不记录他们的“这是错误的,但我会接受它”解决方法。记录它合法化做错了。 –

回答

4

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

因此,像

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

会倒闭解释为

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

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

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

+0

@Leon的缺点,谢谢编辑。事实上,整个段落都是不正确的,我被命令解释器的行为误导了。 –

0

没有任何结果,因为你甚至不能用反斜杠命名文件或文件夹。因此,多个连续的反斜杠将始终被视为路径中的一个分隔符。

+0

这是不正确的。你可以用'dir c:\',但不能'dir c:\\' –

+0

'dir C:\\'不起作用,但是'dir C:\ Windows \\'确实有效。 'dir'命令必须使用稍微不同的逻辑。 – kevinbatchcom

+1

是的,许多内置命令本身解析路径名,因此与Win32 API有一些不同的规则。推测这是为了与DOS向后兼容。如果你说'dir c:\\ Users \ xyzzy',你会得到“网络路径没有找到”,所以看起来双反斜杠离启动太近会让'cmd.exe'混淆,认为它是UNC路径。另一方面''notepad.exe'完全满意相同的语法。 –

相关问题