PowerShell中New-Item创建目录联结时Volume ID路径损坏的解决方法
解决PowerShell中使用Volume ID路径创建目录联结的问题
问题根源
New-Item在处理DOS设备路径(如Volume ID格式)时,会错误转换路径前缀,导致联结指向异常。直接调用cmd /c mklink失败通常是因为PowerShell的引号转义或参数传递方式有误。
可行解决方案
1. 正确调用cmd的mklink命令
PowerShell中调用mklink需注意路径的引号嵌套处理,尤其是路径包含空格时。创建目录联结的正确语法:
cmd /c "mklink /J `"C:\Path\To\Junction`" `"\\?\Volume{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}\Some_Path`""
/J参数指定创建目录联结类型- 用嵌套双引号
"包裹路径,避免PowerShell解析时破坏路径结构
2. 使用.NET的Directory.CreateSymbolicLink方法
.NET原生API能正确识别Volume ID格式路径,避免PowerShell cmdlet的路径转换问题:
using namespace System.IO # 定义联结路径与目标Volume ID路径 $junctionPath = "C:\MyJunction" $targetPath = "\\?\Volume{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}\Some_Path" # 直接创建目录联结 [Directory]::CreateSymbolicLink($junctionPath, $targetPath)
该方法会原样使用传入的目标路径,不会修改Volume ID前缀格式。
3. 验证Volume ID根路径的替代方案
由于Test-Path无法识别Volume ID根路径(如\\?\Volume{...}\),可以用mountvol命令验证:
$volumePath = "\\?\Volume{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}\" mountvol $volumePath /L
路径有效时会返回卷名称,无效则提示错误信息。
内容的提问来源于stack exchange,提问作者Umit Cakar
相关产品推荐
相关产品推荐

