我正在尝试查询注册表中程序的安装位置。我感兴趣的只是位置输出。
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
那我哪里错了?
答案 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