标题: [注册表类] 【已解决】批处理如何取得注册表中项目的名称并完成删除操作? [打印本页]
作者: xinxing124 时间: 2018-8-31 16:36 标题: 【已解决】批处理如何取得注册表中项目的名称并完成删除操作?
本帖最后由 xinxing124 于 2018-9-2 20:32 编辑
例如注册表中存在如下项目和值,其中n不确定,
HKEY_CURRENT_USER\Software\Microsoft\Test\Find
FindTextFromEditor REG_SZ 1
Find REG_SZ ou
Find 1 REG_SZ You
Find 2 REG_SZ NT
Find 3 REG_SZ CT
……
……
……
Find n REG_SZ MT
如何批处理列出所有的 Find——Find n 的项目名称,方便删除存在的项目。
上面的问题答案在 9楼 【已解决】
作者: Batcher 时间: 2018-8-31 17:23
- reg query HKEY_CURRENT_USER\Software\Microsoft\Test
复制代码
这个命令的结果发出来看看
另外,系统是XP还是Win7呢?
作者: xinxing124 时间: 2018-8-31 18:00
FindTextFromEditor REG_SZ 1
Find REG_SZ ou
Find 1 REG_SZ You
Find 2 REG_SZ NT
Find 3 REG_SZ CT
结果与我所列相同的,
另外试过了:
For /f "delims=" %%i in ('@Reg Query "HKEY_CURRENT_USER\Software\Microsoft\Test\Find" /s ^|findstr /C:"Find " ') do echo %%i
出现的结果是:
Find 1 REG_SZ You
Find 2 REG_SZ NT
Find 3 REG_SZ CT
……
……
……
Find n REG_SZ MT
下面这种也试过也不行
skip=4 delims=REG tokens=2,*
作者: Batcher 时间: 2018-8-31 20:09
回复 3# xinxing124 - reg query HKEY_CURRENT_USER\Software\Microsoft\Test > 1.txt
复制代码
把1.txt压缩传上来我试试
作者: WHY 时间: 2018-8-31 21:39
- Reg Query "HKCU\Software\Microsoft\Test\Find" | findstr /C:"Find " /C:"Find "
复制代码
作者: xinxing124 时间: 2018-9-1 17:39
输出的结果在附件,这里复制了一份
HKEY_CURRENT_USER\Software\Microsoft\Test\Find
Find REG_SZ YU
Find 1 REG_SZ >
Find 2 REG_SZ {
Find 60 REG_SZ I
FindTestFromEditor REG_SZ 1
作者: xinxing124 时间: 2018-9-1 17:42
回复 5# WHY
是要取得前面的项目名称,如 Find、Find 1、Find 2等等,才好将这些不需要的项目进行删除
作者: xinxing124 时间: 2018-9-1 17:46
本帖最后由 xinxing124 于 2018-9-2 12:45 编辑
回复 4# Batcher
附件 文件在 6楼 看看有没办法,把这个项目名称取到 Find、Find 1、Find 2并删除这类临时记录的项目,文件中还包括些 Replace、Replace 1、Replace 2这种项目都是临时记录的也最好能一并删除。6楼附件中导出的是Find部分。 由于还存在 Replace、Replace 1、Replace 2这种要删除的项目 所以不能用 R作为分隔符使用,像是唯一的一个 只有判断以 4个连续空格 为分隔符的方式。- reg delete "HKEY_CURRENT_USER\Software\Microsoft\Test" /v "Find "
- reg delete "HKEY_CURRENT_USER\Software\Microsoft\Test" /v "Replace "
- pause
复制代码
这种都是提示找不到项目。
这个分割的字符串如果是 "AB C<tab>" 又要如何写? AB C加tab键。
作者: zaqmlp 时间: 2018-9-1 19:27
- @echo off
- set "regkey=HKEY_CURRENT_USER\Software\Microsoft\Test"
- for /f "tokens=*" %%a in ('reg query "%regkey%"^|findstr /r /c:"^ *Find [1-9]*[0-9]*" /c:"^ *Replace [1-9]*[0-9]*"') do (
- set "line=%%a"
- setlocal enabledelayedexpansion
- for /f "delims=|" %%b in ("!line: =|!") do echo;"%%b"
- endlocal
- )
- pause
复制代码
作者: WHY 时间: 2018-9-1 19:29
本帖最后由 WHY 于 2018-9-1 19:48 编辑
PowerShell 脚本- $path = 'HKCU:\Software\Microsoft\Test';
- (Get-Item $path).Property -match '^Find( \d+)?$' | Remove-ItemProperty $path -Name {$_} -WhatIf
复制代码
作者: xinxing124 时间: 2018-9-2 02:14
回复 9# zaqmlp
这个分割的字符串如果是 "AB C<tab>" 又要如何写? AB C加tab键。
作者: Batcher 时间: 2018-9-3 13:03
回复 11# xinxing124
用9楼代码测试6楼文本正常。看不懂你这个新的需求是想表达什么意思,请把包含这种场景的1.txt传上来我试试。
作者: xinxing124 时间: 2018-9-3 13:36
回复 12# Batcher
文件类似附件这种,用<tab>字符分割的:
作者: Batcher 时间: 2018-9-3 14:46
回复 13# xinxing124
希望得到什么结果?
作者: xinxing124 时间: 2018-9-3 15:05
回复 14# Batcher
希望的结果是,全部取得第二列的值,然后对于第二列的值进行从小到大排序。取得最大值,最小值和平均值。
作者: Batcher 时间: 2018-9-3 15:25
回复 15# xinxing124
先看看这是不是你想要的第二列- @echo off
- for /f "tokens=2" %%i in ('type "测试.txt"') do (
- echo %%i
- )
- pause
复制代码
作者: xinxing124 时间: 2018-9-3 16:36
回复 16# Batcher
可以了,谢了。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |