为何Windows PowerShell中Resolve-Path c:与c:\、d:结果不同?
为什么PowerShell中
Resolve-Path c:不返回盘符根路径? 这是因为Windows系统为每个驱动器维护了独立的当前工作目录,PowerShell(以及传统CMD)完全遵循这个系统级的路径解析规则,和Resolve-Path命令本身无关,Convert-Path同理。
具体逻辑拆解:
- 当你使用
Resolve-Path c:\时,c:\是明确的绝对根路径,命令直接解析这个指定路径,自然返回C:\。 - 当你省略末尾的
\,只写c:时,这不是根路径的写法,而是驱动器标识符,它指向的是该驱动器在系统中记录的当前工作目录:- 比如你之前执行过
cd C:\Users\xxx,系统就会把C盘的当前工作目录设置为这个路径,后续执行Resolve-Path c:就会返回C:\Users\xxx; - 当你切换到
c:\后,C盘的当前工作目录被更新为根目录,这时Resolve-Path c:就返回C:\; - 每个驱动器的当前工作目录是独立的:比如你在D:\Desktop目录下,C盘的当前工作目录还是之前记录的路径,所以
Resolve-Path c:会返回C盘上次的工作目录,不会因为你当前在D盘就改变。
- 比如你之前执行过
如何确保获取驱动器根路径?
如果需要稳定获取盘符的根路径,必须明确加上末尾的\,比如Resolve-Path c:\,或者使用.NET方法直接获取根路径:
[System.IO.Path]::GetPathRoot('c:') # 返回 C:\
内容的提问来源于stack exchange,提问作者Little Train
相关产品推荐
相关产品推荐

