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

时间:2018-03-29 17:28:30

标签: batch-file registry

我创建了一个批处理文件,用于查询将数据保存到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文件的新单元格中。

原因是我们必须在大量计算机上搜索子密钥(它是每台PC中的唯一编号,并保存在子密钥\ IPC Config下)并在Excel中构建数据库,但是漫长的路径挤满了CSV文件。

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

如果您可以将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
)

答案 1 :(得分:0)

不确定你写的代码是什么,因为你没有发布它,但通常这样的代码应该这样做。

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

您要将set "string..替换为reg query结果的结果。

请注意,这不会允许值中包含空格。

答案 2 :(得分:0)

如果您只查找子项名称​​且只有一个 *,那么您可以使用它:

axios-mock-adapter

如果有多个子项,(*或者您希望在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 (Echo %%~A)>>"%UserProfile%\Desktop\info.csv" Pause

修改

如果您希望每个都没有引号,那么您可以使用此修改:

) Do Echo %%A>>"%UserProfile%\Desktop\info.csv"