2013-03-28 45 views
2

我有一個這樣的批處理腳本(我可以從Open a file in Visual Studio at a specific line number得到)。任何人都可以告訴我如何通過devenev的註冊表項(即HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \ devenv.exe),以便我不必將路徑作爲D:\ Progra .. ..它可以在任何安裝了visual studio的電腦上運行。提前致謝。如何使用批處理腳本獲取註冊表項的值?

@echo off

cd /d D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE

devenv /Command "Edit.Goto 83" "E:\examples\A.cpp"

@echo off

+0

爲什麼不只是添加路徑d:\ Program Files文件\ ... \ IDE到PATH環境變量? –

+0

可能的重複http://stackoverflow.com/questions/445167/how-can-i-get-the-value-of-a-registry-key-from-within-a-batch-script –

回答

3
for /f "tokens=3*" %%x in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\devenv.exe"') do set DEVENV="%%x %%y" 
%DEVENV% /Command "Edit.Goto 83" "E:\examples.A.cpp" 

一個警告 - 如果你有多個版本的VS安裝,這將啓動最近安裝的版本。

更一般:

set REGKEY="HKLM\SOFTWARE\Wow6432Node\BI\Science\AB\exenamehere.exe" 
set CPPFILE=C:\SomePathHere\foo.cpp 

for /f "tokens=3*" %%x in ('reg query "%REGKEY%"') do set EXE="%%x %%y" 
%EXE% /AnyOtherParamsHere "%CPPFILE%" 

您也可以接受命令行參數,像這樣(理想情況會有錯誤處理爲好)。 %1是第一個參數,%2是第二個參數,直到9爲止。超過9個參數當然是可能的,但超出了這個問題的範圍。

set REGKEY="HKLM\SOFTWARE\Wow6432Node\BI\Science\AB\exenamehere.exe" 
set FILENAME=%1 

for /f "tokens=3*" %%x in ('reg query "%REGKEY%"') do set EXE="%%x %%y" 
%EXE% /AnyOtherParamsHere %FILENAME% 

如果路徑到您的文件中有空格,你需要引用他們,當你運行這個批處理文件(例如,mybatch.cmd "C:\path with spaces\foo.cpp")。

另外,如果您發現它有用,請不要忘記標記爲答案。 :-)

+0

工作! ....感謝一噸:) –

+0

如果路徑不是「E \ examples.A.cpp」,並且如果它是另一個註冊表項作爲HKLM \ SOFTWARE \ Wow6432Node \ BI \ Science \ AB ...我怎麼能通過這到你提供的代碼中。提前感謝。 –

+0

抱歉完全忘了!!! –

0
@ECHO OFF 
SETLOCAL 
FOR /F "tokens=2*" %%A IN (
    'REG QUERY "HKLM\SSOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" /v devenv.exe' 
) DO (set vs9dir=%%B) 
ECHO %vs9dir% 

應該返回自己的價值 - 在理論上。我無法驗證,因爲我沒有VS.

0

你可以試試這個,它可能工作:

for /f "tokens=3*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\devenv.exe"^|find "<NO NAME>"') do set "key=%%j" 
echo "%key%"