PowerShell 7:解析路径并将 .. 附加到目录名称

问题描述 投票:0回答:1

我正在处理的这个项目有一些 Windows Perl 代码,用于设置

dirname(__FILE__) . "../../../../"
的路径。这段代码已经工作了几年了,但我意识到它实际上应该是 3 个
..
:
dirname(__FILE__) . "/../../../"
才能获得我们需要的路径。不过,该路径确实解析到了正确的位置。 Perl 中路径的组合方式是
..\dir1\dir2../../../../
dir2..
看起来不太对,但是:

> Test-Path ..\dir1\dir2..
True
> Test-Path ..\dir1\dir2..\
False
> Test-Path ..\dir1\dir2..\..\
True

PowerShell 是如何解析这里的路径的?命令提示符显示相同的行为。

windows powershell perl powershell-7
1个回答
0
投票

在 Windows 路径中,

..
表示“父目录”。因此,
anything\..
等同于
.
。没有理由检查
anything
是否存在。

C:\>dir /b nonexistent\..\Windows\explorer.exe
explorer.exe

顺便说一句,这在 unix 中不起作用,因为它不会特殊对待

..
。它在磁盘上查找,通常是到父目录的硬链接。

/$ ls -d nonexistent/../usr
ls: cannot access 'nonexistent/../usr': No such file or directory

/$ ls -d home/../usr
home/../usr

/$ realpath home/../usr
/usr
© www.soinside.com 2019 - 2024. All rights reserved.