[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] 注册表项名称的尾部包含有空格或者tab,脚本无法正常运行

各位大佬,我的需求是要查询【HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers】里各个子项内是否存在【HTTP_ProxyPort】的键值,如果有则删除包含该键值的子项
当前遇到的问题是,子项名的尾部如果包含空格或者制表符tab,则会报错【错误: 系统找不到指定的注册表项或值。】

注册表结构如下:
【HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers】
--【HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers\CBH-aaa】
------【键值:HTTP_ProxyPort】
--【HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers\SAIS                        】
------【键值:HTTP_ProxyPort】


我的bat脚本:
  1. setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('reg query HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers') do (
  3.     for /f "tokens=2* delims= " %%b in ('reg query "%%a" /v HTTP_ProxyPort') do (
  4.         set tmpv=%%c
  5.         if /I "!tmpv!" neq nul (
  6.             reg delete "%%a" /f
  7.         )
  8.     )   
  9. )
复制代码
拜托指教,非常感谢

回复 2# smss

多谢解答,但是经过测试,尾部带空格或者制表符的子项还是删除不了,提示【错误: 系统找不到指定的注册表项或值。】

TOP

本帖最后由 枯叶啊枯叶 于 2020-12-5 12:09 编辑

不知道尾部有空格这个问题能不能解决,如果技术上真的没法解决,是否可以做到,当执行脚本时报错【错误: 系统找不到指定的注册表项或值。】,则直接删除根项【HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers
或者说只要子项名称里包含空格或者制表符就删除根项【HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers

TOP

用||是否可以实现该需求,当我的脚本执行遇到错误,则直接执行reg delete HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers

如果可以,请问该命令是放在哪呢,我刚试了下,没成功,应该是我写的不对

TOP

回复 6# smss


已上传,如上,非常感谢。

如果尾部有空格的问题无法解决,我期望能能做个判断,在碰到执行失败的情况下,直接删除[HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\PremiumSoft\Navicat\Servers]

TOP

回复 8# smss


    您说的对,我这边验证下来,感觉跟您说的一样,有什么解决方案吗,实在不行就曲线救国,如果遇到这种子项,我就直接把根给删除了。

TOP

有大佬能解决吗?

TOP

  1. setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('reg query HKEY_USERS\S-1-5-21-3100330834-827329422-2494641558-1001\SOFTWARE\7-Zip\Servers') do (
  3.     for /f "tokens=2*" %%b in ('reg query "%%a" /v HTTP_ProxyPort') do (
  4.         if /i "%%c" neq "" (
  5.             reg delete "%%a" /f
  6.             if errorlevel 1 (
  7.                 reg delete  "HKEY_USERS\S-1-5-21-3100330834-827329422-2494641558-1001\SOFTWARE\7-Zip\Servers" /f
  8.             )
  9.         )
  10.     )   
  11. )
复制代码
好像发的代码运行有点问题,进行了修正,去把/f放到后面, reg delete  后面的项名称好像多了reg query,给删除了;但是好像还是不行,还是提示【 错误: 系统找不到指定的注册表项或值。】

我在本地建立的模拟注册表结构,上传如附件

TOP

回复 11# Batcher


    回复如下,麻烦帮忙看下还有解决办法吗

TOP

返回列表