[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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. )
复制代码
拜托指教,非常感谢

回复 12# 枯叶啊枯叶
  1. @echo off
  2. for /f "delims=" %%i in ('reg query "HKEY_USERS\S-1-5-21-3100330834-827329422-2494641558-1001\Software\7-Zip\Servers" /v "HTTP_ProxyPort" /s ^| findstr "^HKEY_USERS"') do (
  3.     reg delete "HKEY_USERS\S-1-5-21-3100330834-827329422-2494641558-1001\Software\7-Zip\Servers" /f
  4. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11# Batcher


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

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

回复 5# 枯叶啊枯叶


这样可以吗:
  1. for /f "delims=" %%a in ('reg query HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers') do (
  2.     for /f "tokens=2*" %%b in ('reg query "%%a" /v HTTP_ProxyPort') do (
  3.         if /i "%%c" neq "" (
  4.             reg delete /f "%%a"
  5.             if errorlevel 1 (
  6.                 reg delete /f "reg query HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers"
  7.             )
  8.         )
  9.     )   
  10. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

有大佬能解决吗?

TOP

回复 8# smss


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

TOP

空格在最后系统会自动删除 这和我们创建空格文件甲一样 路径中具有非法字符
虽然Echo reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Identity\SAIS                        " /f
可以显示空格系统依然会自动删除最后空格
系统实际执行reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Identity\SAIS”

TOP

回复 6# smss


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

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

TOP

把那个包含空格或者制表符的注册表上传上来

TOP

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

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

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

回复 2# smss

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

TOP

  1. for /f "delims=" %%i in ('reg query HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers /v HTTP_ProxyPort /s^|findstr "HKEY"')do reg delete "%%i"
复制代码

TOP

返回列表