2011-12-07 31 views
3

我想查詢程序在註冊表中的安裝位置。我感興趣的是位置輸出。使用管道命令與Windows上的/ f(與reg查詢)

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 

所以我要去哪裏錯了?

回答

7

您必須使用插入符號(^)逃脫|字符。

@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

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