我需要一个批处理循环来提取数据值并在其下一个命令中使用它。我想要查询的所有注册表项都已保存到 *.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
这是“静音”所需的开关。根据需要进行更改。
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/f- 循环命令以执行另一个命令的结果。