Java 如何迭代所有注册表项?

Java 如何迭代所有注册表项?,java,windows,batch-file,registry,Java,Windows,Batch File,Registry,我试图迭代所有注册表项,以查找(包含)和删除jre1.5.0_14值。有办法吗 下面的代码仅在特定密钥下找到jre1.5.0_14!我确实想迭代所有的键。顺便说一下,如果if子句等于jre1.5.0_14,那么它就会得到,但是如果它包含jre1.5.0_14,那么它就应该得到 提前谢谢 致以最良好的祝愿 @echo off setlocal set KEY_NAME="HKEY_CURRENT_USER\Software\Microsoft\Notepad" set VALUE_NAME=j

我试图迭代所有注册表项,以查找(包含)和删除jre1.5.0_14值。有办法吗

下面的代码仅在特定密钥下找到jre1.5.0_14!我确实想迭代所有的键。顺便说一下,如果if子句等于jre1.5.0_14,那么它就会得到,但是如果它包含jre1.5.0_14,那么它就应该得到

提前谢谢

致以最良好的祝愿

@echo off
setlocal 

set KEY_NAME="HKEY_CURRENT_USER\Software\Microsoft\Notepad"
set VALUE_NAME=jre1.5.0_14

FOR /F "skip=2 tokens=3" %%A IN ('REG QUERY %KEY_NAME%') DO if "%%A"=="%VALUE_NAME%" (

    @echo %%A


)

我是根据你最后的评论发布的。您(可能)需要检查所有的键,并且您不希望在最后使用/d

如果您知道字符串位于特定的键中,请使用此键(我认为这是您最初的目标):

使用以下命令查看所有键。它在每个键上运行查询,如果在输出中找到“hkey”(表示查询找到了什么),它会将行(位置)写入regout.txt。第二个for循环遍历文件的每一行,您可以在其中执行reg delete命令

@echo off
SETLOCAL EnableDelayedExpansion
    del regout.txt >NUL 2>&1
        for %%a in (HKCU, HKLM, HKU, HKCR) do REG QUERY %%a /f jre1.5.0_14 | FIND /i "hkey" >>regout.txt
        for /f %%a in (regout.txt) do (
             rem do deletion here
            echo %%a &&pause
        )
exit
如果文件为空,则找不到字符串,您应在Windows中再次运行regedit以确认该字符串是否存在


编辑:尝试解决“该进程无法访问该文件,因为该文件正被其他进程使用…”

尝试以下代码:它使用不同的文件名,创建一个带有查询输出的tmp文件,然后将其复制到txt。新的txt文件肯定会被解锁

@echo off
SETLOCAL EnableDelayedExpansion
del regout.txt >Nul 2>&1
del regout.tmp >Nul 2>&1
del output.txt >Nul 2>&1
    for %%a in (HKCU, HKLM, HKU, HKCR) do REG QUERY %%a /f jre1.5.0_14 | FIND /i "hkey" >>output.tmp
    copy output.tmp output.txt /y
    for /f %%a in (output.txt) do (
        rem do deletion here
        echo %%a &&pause
        del output.tmp
    )
exit

使用不同的语言,如python、ruby、vbscript等,这可能会容易得多。你好,jeffamaphone,谢谢你的回复。我如何通过vbscript实现这一点?使用
set KEY\u NAME
将其设置为只在
HKEY\U CURRENT\u USER\Software\Microsoft\Notepad
@sjoy中查看,如何使其在根目录中迭代?我已经很久没有这样做了时间和遗忘。是Reg查询信息。查看他关于使用正确开关的说明,以及“一些示例”下的说明。“您需要Regedit才能删除。可以开始了。谢谢你的回复。我正在获取进程无法访问该文件,因为当我运行批处理文件时,另一进程正在使用该文件。我误读了您的评论。您是否打开了regout.txt?如果是,请关闭它。批处理删除该文件,然后重新创建其文件,因此我不确定问题出在哪里。我现在已经很晚了,但今晚将再次签入。如果您重复运行批处理文件,但仍然存在相同的错误,请尝试以下操作:将这一行放在两个For语句之间:
taskkill/im notepad.exe 2>nul
(注意:它将杀死所有记事本实例,因此请确保保存打开的所有记事本数据)我可以回显匹配的结果而不是写入文件吗?不像写入文件那样容易。taskkill有什么问题?事实上,把它放在
del
行的前面,以防出现问题。我在这里测试,没有问题。一旦工作正常,你可以把它拿出来。
@echo off
SETLOCAL EnableDelayedExpansion
del regout.txt >Nul 2>&1
del regout.tmp >Nul 2>&1
del output.txt >Nul 2>&1
    for %%a in (HKCU, HKLM, HKU, HKCR) do REG QUERY %%a /f jre1.5.0_14 | FIND /i "hkey" >>output.tmp
    copy output.tmp output.txt /y
    for /f %%a in (output.txt) do (
        rem do deletion here
        echo %%a &&pause
        del output.tmp
    )
exit