在Windows上使用for/f的管道命令(使用reg查询)

Rex*_*Rex 3 windows registry batch-file

我试图在注册表中查询程序的安装位置.我感兴趣的只是位置输出.

这个问题有部分解决方案,但它没有多大帮助.在Windows 7上,reg命令输出一个愚蠢的注册表项标题以及值,如下所示:

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS Unicode" /v InstallLocation

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS Unicode
InstallLocation    REG_EXPAND_SZ    C:\Program Files\NSIS
Run Code Online (Sandbox Code Playgroud)

首先,有没有办法关闭标题并简化输出?

在命令提示符下,我可以将上面的内容更改为

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS Unicode" /v InstallLocation | findstr InstallLocation
Run Code Online (Sandbox Code Playgroud)

所以它只返回第二行.

现在,如果我使用a FOR /F来解析它并只获取目录值,则FOR命令失败| was unexpected at this time.

这是我的批处理文件:

@for /f "tokens=2* delims=   " %%k in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS Unicode" /v InstallLocation | findstr InstallLocation') do @echo %%k
Run Code Online (Sandbox Code Playgroud)

那我哪里错了?

Tom*_*lak 8

您必须|使用插入符号(^)转义字符.

@echo off
setlocal

set KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS Unicode
set V=InstallLocation

for /f "tokens=2* delims= " %%k in ('reg query "%KEY%" /v %V% ^| findstr "%V%"') do echo %%k
Run Code Online (Sandbox Code Playgroud)

这会REG_SZ在我的机器上返回.