Так что это, вероятно, вааааааа поздно для вечеринки, но настоящая проблема - ошибка или, скорее, повторение одной и той же ошибки в трех пакетных файлах.
C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools \ VCVarsQueryRegistry.bat
C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ Tools \ vsvars32.bat
C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ vcvars32.bat
Шаблон ошибки везде, где цикл for используется для циклического перебора значений реестра. Это выглядит так:
@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "10.0"') DO (
@if "%%i"=="10.0" (
@SET "VS100COMNTOOLS=%%k"
)
)
Проблема заключается во втором появлении %% i. То, как работает конструкция цикла, это первая переменная %%, это первый токен, следующий - второй, и так далее. Таким образом, второй %% i должен быть %% j (или что угодно), чтобы он указывал на значение, которое могло бы быть «10.0». Вы можете сказать, что разработчик хотел использовать i, j, k в качестве значений, потому что во вложенном @SET в if они используют %% k. Какой будет путь.
Итак, вкратце, пройдите все эти типы циклов в трех файлах выше и измените второе вхождение %% i на %% k, и все будет работать так, как должно. Так должно выглядеть так:
@for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\VisualStudio\SxS\VS7" /v "10.0"') DO (
@if "%%j"=="10.0" (
@SET "VS100COMNTOOLS=%%k"
)
)
Надеюсь, это поможет. Не уверен, относится ли это ко всем версиям. Я только знаю, что это относится к VS 2010 (SP1).