2013-08-27 69 views
1

我是批處理腳本新手。我試圖編寫一個批處理文件來遍歷註冊表位置HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ Folders中保存的所有字符串值。並找出一定條件的結果。條件是這樣的:一個字符串值,'名字'字段以'Office14'結尾「。我還想存儲註冊表值的'名稱'字段,其中名稱以'Office14'結尾。這裏是代碼這是我用。如何使用批處理腳本迭代註冊表文件夾?

@echo OFF 

    set KEY_NAME="HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Folders" 
    set OFFICE=OFFICE14\ 
    set RESULT="NOT FOUND" 

    FOR %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders"') DO (
     set ValueName=%%A 
     REM Getting 9 characters from right i.e OFFICE14\ and comparing it to %OFFICE% 
     set ValueName=%ValueName:~-9% 
     IF %ValueName%==%OFFICE% (
      set RESULT="FOUND" 
      goto :NEXT 
     ) 
    ) 
    : NEXT 
    echo %RESULT% 

但這裏的結果始終是「未找到」。任何人可以幫助我解決這個問題的代碼或點我到一些有用的文檔做同樣的。

感謝。

編輯:名稱的完整值(以Office14結尾)將被存儲在一個變量中。

回答

1
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Folders"|find /i "\Office14\" >nul 2>&1 && set "RESULT=FOUND" 
echo %RESULT% 

附加問題被回答後

目標字符串是:

 C:\Program Files\Microsoft Office\Office14\  REG_SZ 

獲取路徑名在這裏是有點困難的,因爲尾隨空格/製表符。我建議用sed for Windows一個解決方案:無sed

for /f "delims=" %%a in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Folders"^|sed -nr "/\\Office14\\/Is/\s+(.*)\s+REG_SZ/\1/p"') do SET "OFFICEPATH=%%~a" 
echo %OFFICEPATH% 

和更先進的解決方案:

@ECHO OFF &SETLOCAL 
for /f "tokens=*" %%a in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\Folders"^|find /i "\Office14\"') do SET "OFFICEPATH=%%a" 
SET "right=REG_SZ%OFFICEPATH:*REG_SZ=%" 
CALL SET "OFFICEPATH=%%OFFICEPATH:%right%=%%" 
:loop 
SET "OFFICEPATH=%OFFICEPATH:~0,-1%" 
IF "%OFFICEPATH:~-1%"==" " GOTO :loop 
ECHO "%OFFICEPATH%" 
+0

@Enduro感謝lot.One更多的問題,是有可能獲取 '名稱'註冊表值的字段,其中找到了匹配項。我還需要存儲註冊表項的「名稱」字段。 – rsKRISH

+0

這不是你原來的問題的一部分。遵循SO的規則,並簡單地提出一個新問題。 – Endoro

+0

@Enduro對不起,因爲我忘了在原來的問題中提到它,但我現在編輯了這個問題。你能爲此提供任何指針嗎? – rsKRISH