2

我有一个像这样的批处理脚本(我可以从Open a file in Visual Studio at a specific line number派生出来)。谁能告诉我如何传递 devenv 的注册表项,即(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

4

3 回答 3

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")。

另外,如果您发现它有用,请不要忘记将其标记为答案。:-)

于 2013-03-28T19:44:06.000 回答
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。

于 2013-03-28T19:39:18.287 回答
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%"
于 2013-03-28T19:46:19.397 回答