Windows 如何使用批处理脚本迭代注册表文件夹?

Windows 如何使用批处理脚本迭代注册表文件夹?,windows,batch-file,registry,Windows,Batch File,Registry,我不熟悉批处理脚本。我试图编写一个批处理文件,以迭代保存在注册表位置的所有字符串值HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders。并找出一定条件下的结果。其中条件类似于:一个字符串值,其“Name”字段以“Office14”结尾。我还想存储注册表值的“Name”字段,其中名称以“Office14”结尾。下面是我使用的代码 @echo OFF set KEY_NAME="HKLM\Software\

我不熟悉批处理脚本。我试图编写一个批处理文件,以迭代保存在注册表位置的所有字符串值HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders。并找出一定条件下的结果。其中条件类似于:一个字符串值,其“Name”字段以“Office14”结尾。我还想存储注册表值的“Name”字段,其中名称以“Office14”结尾。下面是我使用的代码

    @echo OFF

    set KEY_NAME="HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Folders"
    set OFFICE=OFFICE14\
    set RESULT="NOT FOUND"

    FOR %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders"') DO (
       set ValueName=%%A
       REM Getting 9 characters from right i.e OFFICE14\ and comparing it to %OFFICE%
       set ValueName=%ValueName:~-9%
       IF %ValueName%==%OFFICE% (
           set RESULT="FOUND"
           goto :NEXT
       )
    )
    : NEXT
     echo %RESULT%
但是这里的结果总是“找不到”。有谁能帮我修复这段代码,或者给我指一些有用的文档来做同样的事情吗

谢谢

编辑:名称的完整值(以Office14结尾)将存储在变量中

reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Folders"|find /i "\Office14\" >nul 2>&1 && set "RESULT=FOUND"
echo %RESULT%

问题回答后追加:

目标字符串为:

     C:\Program Files\Microsoft Office\Office14\     REG_SZ
在此处获取路径名有点困难,因为后面有空格/制表符。我建议使用以下解决方案:


以及一个更高级的解决方案,无需
sed

@ECHO OFF &SETLOCAL
for /f "tokens=*" %%a in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Folders"^|find /i "\Office14\"') do SET "OFFICEPATH=%%a"
SET "right=REG_SZ%OFFICEPATH:*REG_SZ=%"
CALL SET "OFFICEPATH=%%OFFICEPATH:%right%=%%"
:loop
SET "OFFICEPATH=%OFFICEPATH:~0,-1%"
IF "%OFFICEPATH:~-1%"==" " GOTO :loop
ECHO "%OFFICEPATH%"

问题回答后追加:

目标字符串为:

     C:\Program Files\Microsoft Office\Office14\     REG_SZ
在此处获取路径名有点困难,因为后面有空格/制表符。我建议使用以下解决方案:


以及一个更高级的解决方案,无需
sed

@ECHO OFF &SETLOCAL
for /f "tokens=*" %%a in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Folders"^|find /i "\Office14\"') do SET "OFFICEPATH=%%a"
SET "right=REG_SZ%OFFICEPATH:*REG_SZ=%"
CALL SET "OFFICEPATH=%%OFFICEPATH:%right%=%%"
:loop
SET "OFFICEPATH=%OFFICEPATH:~0,-1%"
IF "%OFFICEPATH:~-1%"==" " GOTO :loop
ECHO "%OFFICEPATH%"

@Enduro非常感谢。还有一个问题,是否可以获取注册表值的“Name”字段,找到匹配项。因为我还需要存储注册表项的“Name”字段。这不是您原来问题的一部分。请遵循SO的规则,简单地提出一个新问题。@Enduro很抱歉,我忘了在origi中提到它最后一个问题。但是我现在已经编辑了这个问题。你能不能也提供一些关于这个问题的指针。@Enduro谢谢。我在没有“sed”的情况下尝试代码,并且在我的系统上返回“C:\Program Files(x86)\Common Files\Microsoft Shared\OFFICE14\Cultures”\“.我原以为它会一直走到14号办公室。我需要对您提供的代码进行任何其他更改吗?@Enduro非常感谢。还有一个问题,是否可以获取注册表值的“名称”字段,在该字段中找到匹配项。因为我还需要存储注册表项的“名称”字段。这不是您最初的问题的一部分。按照SO的规则,简单地提出一个新问题。@Enduro很抱歉,我忘了在原始问题中提到它。但是我现在已经编辑了这个问题。你能不能也提供一些建议呢?@Enduro谢谢。我尝试了没有“sed”的代码,在我的系统上它返回“C:\ProgramFiles(x86)\Common Files\Microsoft Shared\OFFICE14\Cultures\”。我原以为它会一直走到14号办公室。我是否需要对您提供的代码进行任何其他更改?