2015-04-01 42 views
0

我在製作程序。安裝後,它將運行一個需要知道應用程序文件夾位置的批處理文件。用空格讀取註冊表值的數據

我使用的安裝嚮導軟件創建一個代表程序的路徑的註冊表項,但「程序文件」中有一個空間,所以批處理輸出將是「C:\ PROGRAM」

我現在腳本是:

@echo off 
setlocal ENABLEEXTENSIONS 
set KEY_NAME="HKEY_LOCAL_MACHINE\Software\MarksRTZ\AV" 
set VALUE_NAME=DataPath 

FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
    set ValueName=%%A 
    set ValueType=%%B 
    set ValueValue=%%C 
) 

if defined ValueName (
    echo data "%ValueValue%" 
    echo name "%ValueName%" 
    echo type "%ValueType%" 
) else (
    echo Not found 
) 

DataPath的值被設置爲[APPDIR]\data上安裝,[APPDIR]是用戶所選擇的位置。

但就像我說的,該腳本將始終輸出C:\Program如果設置[APPDIR]在安裝類似C:\Program Files (x86)\MarksRTZ\AV\(這實際上是默認值)

我該如何解決這個問題?

我也會注意到;批處理文件不是真正的程序,它將是在正確的工作目錄中啓動程序的簡單腳本。

回答

0

下一個代碼剪斷應tokens=1-2*,甚至與setlocal DISABLEEXTENSIONS工作:

rem ensure %ValueName% is not visible as it could be defined already! 
set "ValueName=" 

FOR /F "usebackq skip=2 tokens=1-2*" %%A IN (
    `REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
    set "ValueName=%%A" 
    set "ValueType=%%B" 
    set "ValueValue=%%C" 
) 

if defined ValueName (
    echo data "%ValueValue%" 
    echo name "%ValueName%" 
    echo type "%ValueType%" 
) else (
    echo Not found 
) 

資源: