拆分路径:在路径中

时间:2015-09-18 18:53:14

标签: powershell

我有一个Autodesk AutoCAD使用的奇怪的注册表路径,我需要对其执行拆分路径然后将值推送到默认值。路径是

HKCU \ SOFTWARE \的Autodesk \ DWGCommon \ ShellEx的\应用{F29F85E0-4FF9-1068-AB91-08002B27B3D9}:AutoCAD的(默认)

这是之前AutoCAD在PoSH 2.0中遇到麻烦,其中Split-Path -parent返回:之前的所有内容,而不是包括:AutoCAD应该如此。我试过-literalPath,看起来比2.0更新,对吗?有人有什么想法吗?

编辑:澄清一下,正确的结果将是父母的 的 HKCU \ SOFTWARE \的Autodesk \ DWGCommon \ ShellEx的\应用{F29F85E0-4FF9-1068-AB91-08002B27B3D9}:AutoCAD的 和一片叶子 的 (默认) 上面的信息有点错误,因为我在AutoCAD和&之间输入了一个BACKSLASH。 (默认)但编辑器正在删除它。 :(我只是注意到在应用之后和开放大括号之前的情况也是如此。我只是试图逃避花括号,在云雀上,但这没有帮助。它仍然对待:作为驱动器分隔符和barfs寻找一个叫做的驱动器 HKCU \ Software \ Autodesk \ DWGCommon \ shellex \ Apps {F29F85E0-4FF9-1068-AB91-08002B27B3D9},但仍然无法显示应用后的反斜杠。 Dang,也许我只需要放弃去喝啤酒。毕竟是星期五晚上9:30。

1 个答案:

答案 0 :(得分:1)

为了让Split-Path将路径识别为 rooted ,您必须在第一个组件之后引入一个人工“:”:

$Path = "HKCU\Software\Autodesk\DWGCommon\shellex\Apps{F29F85E0-4FF9-1068-AB91-08002B27B3D9}:AutoCAD(Default)"

# Find first occurrence of \
$FirstSplit = $Path.IndexOf('\')

if($Path[$FirstSplit - 1] -ne ':'){
    $RootedPath = $Path.Insert($FirstSplit, ':')
}

$Value = Split-Path $RootedPath -Leaf
# Remove ":" again
$Key = (Split-Path $RootedPath -Parent).Remove($FirstSplit,1)

现在,它们应该被正确分割:

PS C:\> "{0}`n  {1}" -f $key,$value
HKCU\Software\Autodesk\DWGCommon\shellex
  Apps{F29F85E0-4FF9-1068-AB91-08002B27B3D9}:AutoCAD(Default)