标题: [注册表类] 注册表项名称的尾部包含有空格或者tab,脚本无法正常运行 [打印本页]
作者: 枯叶啊枯叶 时间: 2020-12-5 10:59 标题: 注册表项名称的尾部包含有空格或者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脚本:- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('reg query HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers') do (
- for /f "tokens=2* delims= " %%b in ('reg query "%%a" /v HTTP_ProxyPort') do (
- set tmpv=%%c
- if /I "!tmpv!" neq nul (
- reg delete "%%a" /f
- )
- )
- )
复制代码
拜托指教,非常感谢
作者: smss 时间: 2020-12-5 11:16
- 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"
复制代码
作者: 枯叶啊枯叶 时间: 2020-12-5 11:25
回复 2# smss
多谢解答,但是经过测试,尾部带空格或者制表符的子项还是删除不了,提示【错误: 系统找不到指定的注册表项或值。】
作者: 枯叶啊枯叶 时间: 2020-12-5 11:51
本帖最后由 枯叶啊枯叶 于 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】
作者: 枯叶啊枯叶 时间: 2020-12-5 13:11
用||是否可以实现该需求,当我的脚本执行遇到错误,则直接执行reg delete HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers
如果可以,请问该命令是放在哪呢,我刚试了下,没成功,应该是我写的不对
作者: smss 时间: 2020-12-5 13:43
把那个包含空格或者制表符的注册表上传上来
作者: 枯叶啊枯叶 时间: 2020-12-5 14:18
回复 6# smss
已上传,如上,非常感谢。
如果尾部有空格的问题无法解决,我期望能能做个判断,在碰到执行失败的情况下,直接删除[HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\PremiumSoft\Navicat\Servers]
作者: smss 时间: 2020-12-5 14:46
空格在最后系统会自动删除 这和我们创建空格文件甲一样 路径中具有非法字符
虽然Echo reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Identity\SAIS " /f
可以显示空格系统依然会自动删除最后空格
系统实际执行reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Identity\SAIS”
作者: 枯叶啊枯叶 时间: 2020-12-5 14:55
回复 8# smss
您说的对,我这边验证下来,感觉跟您说的一样,有什么解决方案吗,实在不行就曲线救国,如果遇到这种子项,我就直接把根给删除了。
作者: 枯叶啊枯叶 时间: 2020-12-5 19:30
有大佬能解决吗?
作者: Batcher 时间: 2020-12-6 17:30
回复 5# 枯叶啊枯叶
这样可以吗:- for /f "delims=" %%a in ('reg query HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers') do (
- for /f "tokens=2*" %%b in ('reg query "%%a" /v HTTP_ProxyPort') do (
- if /i "%%c" neq "" (
- reg delete /f "%%a"
- if errorlevel 1 (
- reg delete /f "reg query HKEY_USERS\S-1-5-21-1686123356-269546589-3369588923-1000\SOFTWARE\ABC\EFG\Servers"
- )
- )
- )
- )
复制代码
作者: 枯叶啊枯叶 时间: 2020-12-6 19:05
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('reg query HKEY_USERS\S-1-5-21-3100330834-827329422-2494641558-1001\SOFTWARE\7-Zip\Servers') do (
- for /f "tokens=2*" %%b in ('reg query "%%a" /v HTTP_ProxyPort') do (
- if /i "%%c" neq "" (
- reg delete "%%a" /f
- if errorlevel 1 (
- reg delete "HKEY_USERS\S-1-5-21-3100330834-827329422-2494641558-1001\SOFTWARE\7-Zip\Servers" /f
- )
- )
- )
- )
复制代码
好像发的代码运行有点问题,进行了修正,去把/f放到后面, reg delete 后面的项名称好像多了reg query,给删除了;但是好像还是不行,还是提示【 错误: 系统找不到指定的注册表项或值。】
我在本地建立的模拟注册表结构,上传如附件
作者: 枯叶啊枯叶 时间: 2020-12-6 19:06
回复 11# Batcher
回复如下,麻烦帮忙看下还有解决办法吗
作者: Batcher 时间: 2020-12-7 10:23
回复 12# 枯叶啊枯叶 - @echo off
- 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 (
- reg delete "HKEY_USERS\S-1-5-21-3100330834-827329422-2494641558-1001\Software\7-Zip\Servers" /f
- )
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |