在Windows上使用管道命令和for /f(使用reg query)

4
我正在尝试查询注册表中程序的安装位置。我感兴趣的只是位置输出。 这个问题有一个部分解决方案,但并没有完全帮助。 在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

首先,是否有方法可以关闭标题并简化输出?

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

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

我希望它只返回给我第二行。

现在,如果我要使用 FOR /F 来解析它并仅获取目录值,则 FOR 命令会失败,显示 | 在此处不是预期的

以下是我的批处理文件:

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

那我哪里做错了?

2个回答

9

您必须使用插入符(^)转义垂直线符号(|)。

@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

这将在我的机器上返回 REG_SZ

3

管道符是特殊字符,必须用^进行转义。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接