批处理循环用于从 txt 文件中查询键列表并重用数据值

批处理循环用于从 txt 文件中查询键列表并重用数据值

我需要一个批处理循环来提取数据值并在其下一个命令中使用它。我想要查询的所有注册表项都已保存到 *.txt 文件中。

例子:

以下命令将返回如下所示的键值、类型和数据。

命令:

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\01690987922DC9549A63529D22383DDF\InstallProperties /V UninstallString

结果:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\01690987922DC9549A63529D22383DDF\InstallProperties
    UninstallString    REG_EXPAND_SZ    MsiExec.exe /X{78909610-D229-459C-A936-25D92283D3FD}

我想要做的是仅提取数据值MsiExec.exe /X{78909610-D229-459C-A936-25D92283D3FD}并将其作为 for 循环中的下一个命令运行。

我有大约 20 个注册表项需要查询,然后运行提取的命令。我还想在执行 msiexec.exe 命令时为其添加静默开关。

我对批量循环还很陌生,相信我需要使用标记/分隔符(?)......不太确定如何让它工作。

答案1

reg query来自 txt 文件的键列表并重用数据值

reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\01690987922DC9549A63529D22383DDF\InstallProperties /V UninstallString

我想要做的是仅提取数据值MsiExec.exe并将 /X{78909610-D229-459C-A936-25D92283D3FD}其作为循环中的下一个命令运行for

下面的批处理文件可以帮助您入门:

@echo off
setlocal enableDelayedExpansion
rem get each key from keys.txt
for /f "usebackq tokens=*" %%i in (`type keys.txt`) do (
  echo Processing key %%i
  rem skip the first line and grab tokens 3 and 4 from the second line
  for /f "usebackq skip=1 tokens=3,4" %%j in (`reg query %%i`) do (
    echo %%j /quiet %%k
    )
  )

笔记:

  • keys.txt应包含要查询的键,每行一个。
  • 您需要两个for循环,第一个循环用于处理每个键,第二个循环(内部)用于解析输出。
  • 我们跳过第一行输出,因为它是键的名称。
  • 当您对批处理文件的操作感到满意时,请将echo其删除。echo %%j /quiet %%k
  • 我认为/quiet这是“静音”所需的开关。根据需要进行更改。

进一步阅读

相关内容