代码之家  ›  专栏  ›  技术社区  ›  Amon Ra II

有没有办法只返回一个子键而不是批处理文件中的整个路径?

  •  -2
  • Amon Ra II  · 技术社区  · 6 年前

    我创建了一个批处理文件,查询中的数据将其保存到CSV文件中。 我正在搜索的数据保存为注册表中的一个子项(子项中的值不相关)。 我有以下疑问:

    reg query "HKCU\Software\Gizmo International\HCM\IPC Config" >>%userprofile%\desktop\info.csv
    

    结果如下:

    HKEY_CURRENT_USER\Software\Gizmo International\HCM\IPC Config\g1322222_127.0.0.1 
    

    但我只想得到子密钥: g1322222_127.0.0.1 (根据 \IPC Config )而不是整个路径,然后将其保存在CSV文件的新单元格中。

    原因是我们必须在大量计算机中搜索子项(它在每台电脑中都是唯一的数字,保存在子项\IPC配置下),并在Excel中建立数据库,但很长的路径会挤满CSV文件。

    谁能帮我一下吗?

    3 回复  |  直到 6 年前
        1
  •  0
  •   Compo    6 年前

    如果您只查找子项名称, 只有一个 *,则可以使用此选项:

    @Echo Off
    Set "HKCU=&H80000001"
    Set "RKEY=Software\Gizmo International\HCM\IPC Config"
    For /F "Tokens=2 Delims={}" %%A In (
        'WMIC Class StdRegProv Call EnumKey "%HKCU%"^,"%RKEY%" 2^>Nul^|Find "sNames"'
    ) Do (Echo %%~A)>>"%UserProfile%\Desktop\info.csv"
    Pause
    

    如果有多个子键,(*或者您希望在csv输出的双引号中包含一个返回的名称),那么您应该 ) Do Echo %%A>>"%UserProfile%\Desktop\info.csv"


    编辑

    如果希望它们都不带引号,则可以使用此修改:

    @Echo Off
    Set "HKCU=&H80000001"
    Set "RKEY=Software\Gizmo International\HCM\IPC Config"
    
    For /F "Tokens=2 Delims={}" %%A In (
        'WMIC Class StdRegProv Call EnumKey "%HKCU%"^,"%RKEY%" 2^>Nul^|Find "sNames"'
    ) Do Set "_=%%A" & >>"%UserProfile%\Desktop\info.csv" Call Echo %%_:"=%%
    
        2
  •  0
  •   Gerhard    6 年前

    不确定您在没有发布时编写了什么代码,但通常应该这样做。

    @echo off
    Set "string=some\path\info\string"
    For %%a in (%string:\= %) do "set value=%%a"
    Echo %value%
    

    你要去的地方。更换 set "string.. 根据您的 reg query 后果

    请记住,这将不允许在值中使用空格。

        3
  •  0
  •   Squashman Stephan    6 年前

    如果可以将reg查询输出转换为变量,那么使用 FOR 命令这纯粹是一个示例,向您展示如何做到这一点。

    @echo off
    set "var=HKEY_CURRENT_USER\Software\Gizmo International\HCM\IPC Config\g1322222_127.0.0.1"
    FOR %%G IN ("%var%") do set "newvar=%%~nxG"
    

    另一个选项使用字符串替换的SET命令使用一些技巧。

    @echo off
    
    set "var=HKEY_CURRENT_USER\Software\Gizmo International\HCM\IPC Config\g1322222_127.0.0.1"
    set "first=%var:\=" & set "last=%"
    echo %last%
    pause
    

    这是我对你想做的事情的尝试。我真的不喜欢没有更多信息的编码。

     @echo off
    
    FOR /F "delims=" %%G IN ('reg query "HKCU\Software\Gizmo International\HCM\IPC Config"') DO (
        FOR %%H IN ("%%~G") DO >>info.csv echo %%~nxH
    )