You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell循环中REG DELETE如何处理带空格的注册表路径?

问题根源

你的代码失效主要有两个原因:

  1. PowerShell的字符串转义、拼接语法使用错误,你写的三引号加+号的拼接逻辑不符合PowerShell语法规范,生成的路径格式错误。
  2. 调用外部程序reg.exe时,带空格的路径必须被双引号包裹才能被正确识别。

最优解决方法(推荐)

直接使用PowerShell原生的Remove-Item命令操作注册表,不需要调用外部exe,也不用额外处理引号问题:

Get-ChildItem "HKCU:\test" -Recurse | ForEach-Object {
    if((Get-ItemProperty -Path $_.PsPath) -match "Matching Value including Spaces") {
        # -Force参数对应reg delete的/f强制删除,-Recurse删除子项
        Remove-Item -Path $_.PsPath -Force -Recurse
    }
}

必须使用reg.exe的解决方法

如果你一定要调用reg.exe实现,两种正确的引号处理写法如下:

Get-ChildItem "HKCU:\test" -Recurse | ForEach-Object {
    if((Get-ItemProperty -Path $_.PsPath) -match "Matching Value including Spaces") {
        # 写法1:直接在传参时加转义的双引号,PowerShell中用`转义双引号
        reg delete "`"$($_.PsPath)`"" /f

        # 写法2:先把带引号的路径存入变量
        $regkey = "`"$($_.PsPath)`""
        reg delete $regkey /f
    }
}

补充说明

PowerShell的双引号字符串本身支持变量插值,不需要用+做字符串拼接,你原来的拼接写法是其他编程语言的习惯,在PowerShell中不需要这么使用。另外建议执行删除前先打印$_.PsPath确认路径符合预期,避免误删注册表。

内容的提问来源于stack exchange,提问作者tar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:06:04