2011-12-07 3 views
3

レジストリ内のプログラムのインストール場所を照会しようとしています。私が興味を持っているのはロケーション出力です。Windowsで/ fとパイプコマンドを使用する(regクエリで)

This questionには部分的な解決策がありますが、それはあまり役に立ちません。

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 

まず出力ヘッダをオフにして簡素化する方法があり、以下に示すように、Windows 7では は、regコマンドは、値と共に愚かレジストリキーヘッダを出力しますか?コマンドプロンプトで

それだけで二行目は私を返すように、私は

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 
関連する問題