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

时间:2011-12-07 08:10:37

标签: windows batch-file registry

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

This question有一个部分解决方案,但它没有太大帮助。 在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命令将无法显示| 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

那我哪里错了?

2 个答案:

答案 0 :(得分: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

这会在我的机器上返回REG_SZ

答案 1 :(得分:2)

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

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